來源:https://blog.csdn.net/Powerful_Fyphp
什麼是反向代理?linux
一、有兩臺服務器A和B屬於同一內網段,可是A不通外網,B通外網,客戶端C只有外網 二、C想經過B訪問A,就須要在服務器B上作反向代理 三、客戶端C經過外網與服務器B通訊,服務器B經過內網轉發客戶端C的請求與服務器A通訊。nginx
測試場景:web
服務器A 內網IP地址:192.168.234.128 部署了上一篇文章中的bbs網站 服務器B 內網IP:192.168.234.130 外網IP:192.168.111.128 客戶端C 外網IP:192.168.111.101centos
需求:瀏覽器
客戶端C能訪問到服務器A的bbs網站服務器
1.測試客戶端C與服務器B經過外網通訊:負載均衡
#客戶端C與服務器B的能夠經過外網通訊curl
2.新建並編輯服務器B的nginx虛擬主機配置文件:測試
[root@centos02 ~]# vi /etc/nginx/conf.d/nginx_proxy.conf
添加以下內容:
server { listen 80; server_name test.bbs.com; location / { proxy_pass http://192.168.234.128; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } }
server_name:服務器A的bbs網站域名(虛擬主機$host) proxy_pass http:服務器A的IP地址 proxy_set_header:代理來源IP和訪問網站的客戶端IP(如不配置,服務器A的nginx訪問日誌的來源IP將全是服務器B的IP地址)
3.從客戶端C訪問服務器A的bbs網站:
修改Windows系統C:\Windows\System32\drivers\etc\hosts文件:
#因爲服務器A的bbs網站域名test.bbs.com爲自定義域名,因此須要在客戶端C修改hosts文件,使瀏覽器訪問test.bbs.com網站是指向到服務器B的外網地址
客戶端C打開瀏覽器訪問test.bbs.com:
#已成功打開bbs網站頁面,nginx反向代理配置完成
4.查看服務器A的nginx訪問日誌:
[root@linux nginx]# tail -1 access.log 192.168.234.130 - - [17/Oct/2019:16:43:29 +0800] "GET /favicon.ico HTTP/1.0" 200 5558 "http://test.bbs.com/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.75 Safari/537.36" "192.168.111.1"
#來源IP192.168.234.130,真實IP:192.168.111.1
補充:
因爲測試的客戶端C和服務器B屬於同一內網,因此真實IP顯示的是192.168.111.0/24網段的網關,演示須要,將客戶端C與服務器B的網段虛構成外網,因此兩個不想通的內網段,也能夠經過該方法配置nginx反向代理
什麼是負載均衡?
當一個域名指向多臺web服務器時,添加一臺nginx負載均衡服務器,經過nginx負載均衡便可未來自於客戶端的請求均衡的發送給每臺web服務器,避免單臺服務器負載太高而其他服務器較爲空閒的不均衡狀況出現
配置nginx負載均衡:
在nginx機器上新建配置文件:
[root@centos02 ~]# vi /etc/nginx/conf.d/test.conf
添加以下內容:
upstream test { ip_hash; server 192.168.0.10:80 weight=100; server 192.168.10.10:80; } server { listen 80; server_name www.test.com; location / { proxy_pass http://test; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } }
upstream:負載均衡配置 apelearn:自定義名,用於server{}中proxy_pass引用 ip_hash:將同一客戶端的全部請求發送給同一服務器(如不發送給同一服務器,有可能出現客戶端剛登錄網站,點擊其餘子頁面又提示登錄) server:web服務器地址 weight:定義權重(範圍0-100),負載均衡服務器優先將請求發送給權重大的web服務器 server_name:訪問網站的域名 proxy_pass:引用upstream定義的名稱
驗證nginx配置並重載:
[root@centos02 ~]# nginx -t nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful [root@centos02 ~]# nginx -s reload
接下來修改客戶端hosts文件將測試的域名www.test.com指向到測試的nginx負載均衡機器的IP便可訪問www.test.com網站。
nginx配置SSL證書實現經過https協議訪問網站:
SSL證書申請網站:
1.https://www.wosign.com/ 2.https://freessl.cn/(免費)
#經過瀏覽器生成後,須要在服務器建立證書文件
建立證書文件:
[root@linux ~]# mkdir /etc/nginx/ssl [root@linux ~]# cd !$ cd /etc/nginx/ssl [root@linux ssl]# touch ca [root@linux ssl]# touch test.crt [root@linux ssl]# touch test.key
#將證書申請網站提供的對應證書的內容添加到ca/ .crt/ .key文件中便可
編輯nginx配置文件:
[root@linux ~]# vi /etc/nginx/conf.d/bbs.conf
添加以下內容:
listen 443 ssl; server_name test.bbs.com; ssl on; ssl_certificate /etc/nginx/ssl/test.crt; #定義.crt文件路徑 ssl_certificate_key /etc/nginx/ssl/test.key; #定義.key文件路徑 ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
驗證配置並重載nginx:
[root@linux ~]# nginx -t nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful [root@linux ~]# nginx -s reload
#接下來訪問網站地址欄便可顯示HTTPS
curl驗證方式:
curl -k -H "host:test.bbs.com" https://192.168.234.128/index.php
#host:域名,https:// webserver IP,輸出結果爲網站頁面標籤信息即表示成功