Nginx反向代理/負載均衡/SSL配置

來源: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,輸出結果爲網站頁面標籤信息即表示成功

相關文章
相關標籤/搜索