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配置檔案就可以了
端口綁定
即根據不同的端口,進而打來不同的網頁
這個是我們一開始配置的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容器,這裡隻示範一個
-
建立tomcat容器
拉取鏡像
docker pull tomcat
- 準備目錄和檔案
#建立目錄 mkdir -p ~/comcat/ROOT #在上面的路徑下建立index.html檔案 cd ~/comcat/ROOT vim index.html
- 建立tomcat容器
docker run -id --name=c_tomcat \ > -p 8080:8080 \ > -v ~/tomcat/:/usr/local/tomcat/webapps \ > tomcat
-
給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; #預設首頁 } }
解釋說明:
當來自域名
的請求通路主控端80端口的時候,會代理到www.proxy.com
上,想要看到更明顯的效果,可以重複建立Tomcat容器的步驟,多建立幾個,分别映射不同的端口然後在配置檔案中多添加幾項http://192.168.220.110:8080
即可upstream
- 效果