天天看點

Nginx配置虛拟主機以及反向代理Nginx配置虛拟主機以及反向代理

Nginx配置虛拟主機以及反向代理

文章目錄

  • Nginx配置虛拟主機以及反向代理
    • 一、Nginx安裝
        • 第一步:拉取鏡像(這一步需要點時間,可以同時往後做)
        • 第二步:提前準備好目錄和conf檔案
        • 第三步:提前準備一個html檔案(一會兒用于看效果)
        • 第四步:建立ngixn容器(需要在~/nginx/目錄下執行)
        • 第五步:檢視效果
    • 二、虛拟主機
      • 端口綁定
        • 域名綁定
    • 三、反向代理
        • 概念
        • 配置

一、Nginx安裝

第一步:拉取鏡像(這一步需要點時間,可以同時往後做)

docker pull nginx
           

第二步:提前準備好目錄和conf檔案

提前建立好目錄

在更目錄下,也就是

~目錄下

建立ngixn檔案夾并且在下面建立個conf檔案夾

讓後建立檔案~/nginx/conf/nginx.conf

user nginx;
worker_processes 1;
error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;
events {
 	worker_connections 1024; 
}
http {
	include /etc/nginx/mime.types;
	default_type application/octet-stream;
    log_format main '$remote_addr - $remote_user [$time_local] "$request" '
					'$status $body_bytes_sent "$http_referer" '
					'"$http_user_agent" "$http_x_forwarded_for"';
     access_log /var/log/nginx/access.log main;
     sendfile on;
     #tcp_nopush on;
     keepalive_timeout 65;
     #gzip on;
     include /etc/nginx/conf.d/*.conf;
}
           

需要解釋一下這個檔案是幹嘛的:一會兒用docker建立容器的時候這個會挂載到nginx容器内用作配置檔案,最後面的include表示會包含nginx容器内

/etc/nginx/conf.d/

目錄下的所有conf檔案

再建立檔案~/nginx/conf.d/80.conf

server {
     listen	80; # 監聽的端⼝
     server_name	localhost; # 域名或ip
     location / { # 通路路徑配置
     	root /usr/share/nginx/html;# 根⽬錄
     	index index.html index.htm; # 預設⾸⻚
 	}
 	error_page 500 502 503 504 /50x.html; # 錯誤⻚⾯
 	location = /50x.html {
 		root html;
 	}
}
           

上面這個檔案一會兒在建立容器時會挂在到容器的

/etc/nginx/conf.d/

目錄下

第三步:提前準備一個html檔案(一會兒用于看效果)

建立檔案~/nginx/html/index.html

随便寫入一些内容

Hello Docker Nginx~
           

第四步:建立ngixn容器(需要在~/nginx/目錄下執行)

docker run -id --name=c_nginx \
-p 80:80 \
-p 81:81 \
-p 82:82 \
-v $PWD/conf/nginx.conf:/etc/nginx/nginx.conf \
-v $PWD/conf.d:/etc/nginx/conf.d \
-v $PWD/logs:/var/log/nginx \
-v $PWD/html:/usr/share/nginx/html \
nginx
           

解釋:

​ -p 的意思是使容器和主控端的端口進行映射,比如

-p 80:80

的意思就是說,當我們通路主控端的

​ 80端口,其實就是在通路nginx容器的80端口

​ $PWD的意思是目前目錄,也就是~/nginx

​ -v 的作用類似于上面端口的映射,為友善了解,可以了解為“檔案的映射”,比如

-v $PWD/conf/nginx.conf:/etc/nginx/nginx.conf

這個配置,當你修主控端下

~/nginx/conf/nginx.conf

的時候實際上就是在修改nginx容器下

/etc/nginx/nginx.conf

這個檔案

第五步:檢視效果

完成之後用浏覽器訪

http://主控端IP:80

就可以看到效果

Nginx配置虛拟主機以及反向代理Nginx配置虛拟主機以及反向代理

二、虛拟主機

虛拟主機,其實故名思路,就是模拟一台或多台主機的效果。那麼它是怎麼做到的呢?又是通過什麼方式呢?其實呀,對于我們配置來說,隻需要關注nginx配置檔案就可以了

端口綁定

即根據不同的端口,進而打來不同的網頁

這個是我們一開始配置的80.conf檔案的内容,可以看到有一個

listen

參數,意思是監聽的端口,當有一個請求從80通路80端口的時候,就會根據下面的配置打開

location

配置的頁面

server {
     listen	80; # 監聽的端⼝
     server_name	localhost; # 域名或ip
     location / { # 通路路徑配置
     	root /usr/share/nginx/html;# 根⽬錄
     	index index.html index.htm; # 預設⾸⻚
 	}
 	error_page 500 502 503 504 /50x.html; # 錯誤⻚⾯
 	location = /50x.html {
 		root html;
 	}
}
           

現在建立個新的配置檔案:~/nginx/conf.d/port.conf

server {
     listen	81; # 監聽的端⼝
     server_name	localhost; # 域名或ip
     location / { # 通路路徑配置
     	root /usr/share/nginx/index;# 根⽬錄
     	index index.html index.htm; # 預設⾸⻚
 	}
 	error_page 500 502 503 504 /50x.html; # 錯誤⻚⾯
 	location = /50x.html {
 		root html;
 	}
}
server {
     listen	80; # 監聽的端⼝
     server_name	localhost; # 域名或ip
     location / { # 通路路徑配置
     	root /usr/share/nginx/regist;# 根⽬錄
     	index regist.htm; # 預設⾸⻚
 	}
 	error_page 500 502 503 504 /50x.html; # 錯誤⻚⾯
 	location = /50x.html {
 		root html;
 	}
}
           

建立index檔案夾并在檔案夾内建立index.html,然後寫上一些内容

建立regist檔案夾并在檔案夾内建立regist.html,然後寫上一些内容

根據配置檔案location參數所配置的目錄,我們需要将建立好的檔案夾拷貝到容器内,當然,你也可以進入容器對應目錄下建立也可以,但是容器内沒有安裝vim指令

向容器内拷貝檔案夾的指令如下(注意路徑問題):

docker cp index/ nginx容器的名字:/usr/share/nginx/index
           

容器名可以通過指令

docker ps

檢視

接着通路主控端不同的端口号會顯示不同的内容

域名綁定

根據通路的域名的不同,打開不同的網頁,關于域名的概念如果有不明白的可以百度快速了解一下

我們直接進入正題,配置的話還是該配置檔案

我們建立配置檔案:~/nginx/conf.d/domain.conf

server {
	listen 80;
	server_name cart.testDomain.com;
	location / {
		root /usr/share/nginx/cart;
		index cart.html;
 	}
}
server {
	listen 80;
	server_name search.testDomain.com;
	location / {
		root /usr/share/nginx/search;
		index search.html;
	}
}
           

然後

建立cart檔案夾并在檔案夾内建立cart.html,然後寫上一些内容

建立search檔案夾并在檔案夾内建立search.html,然後寫上一些内容

和端口綁定類似,根據配置檔案中lcoation參數拷貝到nginx容器的

/usr/share/nginx/

路徑下。

然後重新開機主控端。

接下來,我們需要修改你電腦的hosts檔案,對于Windos電腦,在路徑

C:\Windows\System32\drivers\etc

下,或者下載下傳個軟體SwitchHosts進行修改,

在檔案最後添加

192.168.220.110 cart.testDomain.com

,然後通路主控端的80端口,會打開cart.html,修改剛才在hosts檔案中添加的内容為

192.168.220.110 search.testDomain.com

,然後再次通路,會打開search.html檔案的内容

原理就是當你配置好server_name的時候,nginx就會根據你請求的域名來打開相應的頁面

三、反向代理

概念

​ 在進行配置之前,首先要知道什麼是代理。

​ 先說說正向代理是什麼,所謂正向代理就是代理用戶端,比如多太用戶端通代理伺服器通路網絡,就像是上網,多個家庭通過電信的代理伺服器上網,這個就是正向代理。而反向代理,和上面所代理的對象相反,反向代理代理的是伺服器,即對于同一個用戶端的不同請求,都會被代理伺服器反向代理到不同的伺服器上。

配置

​ 為了友善一會兒看到效果,我們先準備一個或多和tomcat容器,這裡隻示範一個

  1. 建立tomcat容器

    拉取鏡像

    docker pull tomcat
               
  2. 準備目錄和檔案
    #建立目錄
    mkdir -p ~/comcat/ROOT
    #在上面的路徑下建立index.html檔案
    cd ~/comcat/ROOT
    vim index.html
               
  3. 建立tomcat容器
    docker run -id --name=c_tomcat \
    > -p 8080:8080 \
    > -v ~/tomcat/:/usr/local/tomcat/webapps \
    > tomcat
               
  4. 給nginx添加配置檔案

    在~/nginx/conf/conf.d下建立proxy.conf檔案

    upstream tomcat-test {
    	server 192.168.220.110:8080;
    }
    server {
    	listen	80; #監聽的端口
    	server_name	www.proxy.com;	#請求的域名
    	location / {
    		proxy_pass	http://tomcat-test;  #代理的伺服器url
    		index	index.html index.htm;	#預設首頁
    	}
    }
               

    解釋說明:

    當來自域名

    www.proxy.com

    的請求通路主控端80端口的時候,會代理到

    http://192.168.220.110:8080

    上,想要看到更明顯的效果,可以重複建立Tomcat容器的步驟,多建立幾個,分别映射不同的端口然後在配置檔案中多添加幾項

    upstream

    即可
  5. 效果
    Nginx配置虛拟主機以及反向代理Nginx配置虛拟主機以及反向代理