1. Nginx用途場景
- 高性能HTTP伺服器
- 做網頁靜态伺服器
- 虛拟主機:可以虛拟出多個網站
- 反向代理伺服器
- 反向代理,負載均衡
- 電子郵件(IMAP/POP3)代理伺服器
2. docker安裝Nginx
- 使用docker安裝:
docker search nginx docker pull nginx
- 建立容器,設定端口映射,目錄映射:
# 在/root⽬錄下建立nginx⽬錄⽤于存儲nginx資料資訊 mkdir ~/nginx cd ~/nginx mkdir conf cd conf # 在~/nginx/conf/下建立nginx.conf⽂件,粘貼下⾯内容 vim nginx.conf
- nginx.conf内容,注意這個配置檔案會包含各個單獨的配置檔案
:include /etc/nginx/conf.d/*.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; }
- 單獨配置某個虛拟主機:
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; } }
- 啟動docker容器:
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
3. 靜态網站部署
3.1 靜态網頁部署目錄
- docker安裝的Nginx預設部署目錄:
/usr/local/nginx/html
- 可以将主控端某個目錄挂載到docker容器裡的預設部署目錄,這樣就可以在主控端上部署靜态資源
3.2 綁定端口虛拟主機
- 可以将一個主控端上同一個docker運作的Nginx伺服器上虛拟出多個主機,修改配置檔案:
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; } } 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 82; # 監聽的端⼝ server_name localhost; # 域名或ip location / { # 通路路徑配置 root /usr/share/nginx/regist;# 根⽬錄 index regist.html; # 預設⾸⻚ } error_page 500 502 503 504 /50x.html; # 錯誤⻚⾯ location = /50x.html { root html; } }
3.3 綁定域名虛拟主機
- 每個域名對應一個IP位址,域名的解析由DNS域名解析負責。
- 域名級别是網址分類的一個标準,包括頂級域名、二級域名等。一個完整的域名由二個或二個以上部分組成。
- 某個域名的解析可能要經過多個DNS伺服器逐漸解析,取決于域名級别。
- 在window系統裡可以設定DNS映射,手動更改某個域名對應的IP位址,進行DNS劫持:
打開: C:\Windows\System32\drivers\etc\hosts 修改DNS映射: 192.168.177.129 www.xzk.com 192.168.177.129 regist.xzk.com
- 在docker的Nginx伺服器裡新增配置:
server { listen 80; server_name www.xzk.com; location / { root /usr/share/nginx/cart; index cart.html; } } server { listen 80; server_name regist.xzk.com; location / { root /usr/share/nginx/search; index search.html; } }
- 重新開機Nginx後,在更改了DNS映射的windows上使用浏覽器通路對應的網址,Nginx伺服器會根據域名的不同啟動不同的主機,即使使用的端口一樣,但是卻是不同的虛拟主機服務。
4. 反向代理和負載均衡
4.1 代理服務
- 區分正向和反向代理的技巧:伺服器無感(不知道源用戶端是誰,例如翻牆),則為正向代理。用戶端無感(不知道最終的目标伺服器是誰 ),則為反向代理。
4.2 反向代理
- 反向代理(Reverse Proxy)⽅式是指以代理伺服器來接受internet上的連接配接請求,然後将請求轉發給内部⽹絡上的伺服器,并将從伺服器上得到的結果傳回給internet上請求連接配接的用戶端,此時代理伺服器對外就表現為⼀個反向代理伺服器。
4.3 配置代理
- 先起一個Tomcat伺服器,作為最終的目的伺服器。
- 在Nginx伺服器配置代理服務:
upstream tomcat-kkb{ server 192.168.220.12:8080; } server { listen 80; # 監聽的端⼝ server_name www.kkb.com; # 域名或ip location / { # 通路路徑配置 # root index;# 根⽬錄 proxy_pass http://tomcat-kkb; index index.html index.htm; # 預設⾸⻚ } }
- 使用配置了DNS映射的電腦上浏覽器上通路:重新啟動Nginx 然後⽤浏覽器測試:http://www.kkb.com。
4.4 負載均衡
- 負載均衡 建⽴在現有⽹絡結構之上,它提供了⼀種廉價有效透明的⽅法擴充⽹絡裝置和伺服器的帶寬、增加吞吐量、加強⽹絡資料處理能⼒、提⾼⽹絡的靈活性和可⽤性。
- 負載均衡,英⽂名稱為Load Balance,其意思就是分攤到多個操作單元上進⾏執⾏,例如Web伺服器、FTP伺服器、企業關鍵應⽤伺服器和其它關鍵任務伺服器等,從⽽共同完成⼯作任務。
- 負載均衡指的是由分發者使用一定的算法将使用者的請求轉到最終的目的伺服器上。
- 将目的伺服器,這裡用三個Tomcat伺服器舉例,起三個docker容器,然後在Nginx伺服器上配置:
upstream tomcat-huike { server 192.168.220.12:8080; server 192.168.220.12:8081 weight=2;#權重為2 通路到該伺服器可能性增加 server 192.168.220.12:8082; } server { listen 80; # 監聽的端⼝ server_name www.huike.com; # 域名或ip location / { # 通路路徑配置 # root index;# 根⽬錄 proxy_pass http://tomcat-huike; index index.html index.htm; # 預設⾸⻚ } error_page 500 502 503 504 /50x.html; # 錯誤⻚⾯ location = /50x.html { root html; } }