Nginx七層及四層反向代理配置的全過程
本文旨在測試 nginx對 http服務 https 服務 的代理方式。
部署測試 http服務
準備測試服務程序 gintest 并啟動如下
[root@localhost ~]# sudo nohup ./gintest 9000 &
[1] 4229
[root@localhost ~]# nohup: 忽略輸入并把輸出追加到"nohup.out"
[root@localhost ~]#
[root@localhost ~]# curl http:localhost:9000
curl: (6) Could not resolve host: http:localhost; 未知的錯誤
[root@localhost ~]# curl http://localhost:9000
{"message":"測試程序,服務器ip:192.168.90.9,端口:9080"}[
nginx反向代理 http服務
安裝 nginx 并修改配置文件 ,對 web服務進行代理如下
server {
listen 80;
server_name localhost;
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
proxy_pass http://192.168.90.9:9000;
root html;
index index.html index.htm;
}
#error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
啟動 nginx 并訪問,結果如下 代理成功

nginx 通過 https反向代理 http服務
使用 https 服務需要安裝http_ssl_module 否則會報錯 『ssl parameter requires ngx_http_ssl_module』
重新編譯安裝 nginx
nginx源碼根目錄執(zhí)行如下命令 ,重新編譯 ,輸出目錄保持不變
./configure --with-http_stub_status_module --with-http_ssl_module make && make install 安裝
成功后可以看到我們的 nginx 目錄下已經(jīng)安裝了新版本的 nginx

配置 nginx
提前準備好一套證書和私鑰, tls.crt tls.key
nginx http 模塊配置中,增加如下配置
server {
listen 443 ssl;
server_name www.mytest.com;
ssl_certificate /root/tls.crt;
ssl_certificate_key /root/tls.key;
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 5m;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
location / {
proxy_pass http://192.168.90.9:9000;
root html;
index index.html index.htm;
}
}
重新加載 配置
[root@localhost conf]# ../sbin/nginx -s reload
訪問測試
通過https訪問應用成功,如下:

這種情況下需要將 應用的證書配置到nginx,如果 nginx代理了很多應用,每個應用證書不同,那么需要配置很多證書。
nginx提供了 stream 模塊用于 tcp/udp 請求直接轉發(fā)后臺服務器處理,不用配置證書。如下
Nginx Stream模塊負載均衡測試
準備測試用 https服務
準備一個 java https 服務
部署 tomcat及 web示例應用

生成tomcat 證書
[root@mysql tomcat]# keytool -genkey -v -alias tomcat -keyalg RSA -keystore /root/tomcat/certs/tomcat.keystore -validity 365
輸入密鑰庫口令:
再次輸入新口令:
您的名字與姓氏是什么?
[Unknown]: zhang
您的組織單位名稱是什么?
[Unknown]: pcitc
您的組織名稱是什么?
[Unknown]: ptitc
您所在的城市或區(qū)域名稱是什么?
[Unknown]: bj
您所在的省/市/自治區(qū)名稱是什么?
[Unknown]: bj
該單位的雙字母國家/地區(qū)代碼是什么?
[Unknown]: bj
CN=zhang, OU=pcitc, O=ptitc, L=bj, ST=bj, C=bj是否正確?
[否]: y
正在為以下對象生成 2,048 位RSA密鑰對和自簽名證書 (SHA256withRSA) (有效期為 365 天):
CN=zhang, OU=pcitc, O=ptitc, L=bj, ST=bj, C=bj
輸入 <tomcat> 的密鑰口令
(如果和密鑰庫口令相同, 按回車):
[正在存儲/root/tomcat/certs/tomcat.keystore]
Warning:
JKS 密鑰庫使用專用格式。建議使用 "keytool -importkeystore -srckeystore /root/tomcat/certs/tomcat.keystore -destkeystore /root/tomcat/certs/tomcat.keystore -deststoretype pkcs12" 遷移到行業(yè)標準格式 PKCS12。
[root@mysql tomcat]# ll certs
總用量 4
-rw-r--r-- 1 root root 2201 3月 3 00:14 tomcat.keystore
配置 tomcat SSL 連接
tomcat 配置文件 server.xml中增加如下內容 :

https服務訪問測試
通過 https 訪問web服務成功
https://192.168.90.20:8443/testWeb/index.jsp

nginx stream 安裝配置
nginx 安裝 stream 模塊
重新編譯安裝 nginx
./configure --with-stream make && make install
配置 nginx stream
nginx.conf配置文件中增加 stream配置(和 http 模塊并列)

訪問測試
通過 nginx 443 端口可以在沒有配置證書的情況下可以通過 https訪問后臺的應用。

負載均衡策略
該模塊支持的負載均衡策略如下:
Round Robin 輪詢– 默認情況下,NGINX 使用 Round Robin 算法對流量進行負載平衡,將其按順序定調用上游組中的服務器。因為是默認方法,所以沒有 round?robin 指令 不配置即為 輪詢。
Least Connections 最少連接數(shù):( least_conn) - NGINX 選擇當前活動連接數(shù)較少的服務器。
Least Time ( least_time;僅適用于 NGINX Plus ) – 選擇具有最低平均延遲和最少活動連接數(shù)的服務器。用于計算最低平均延遲的方法取決于 least_time 指令中包含以下哪些參數(shù):
connect – 連接上游服務器的時間
first_byte – 接收第一個數(shù)據(jù)字節(jié)的時間
last_byte – 從服務器接收完整響應的時間
示例如下:
upstream stream_backend {
least_time first_byte;
server backend1.example.com:12345;
server backend2.example.com:12345;
server backend3.example.com:12346;
}
Hash ( hash) – NGINX 根據(jù)用戶定義的header選擇服務器,例如源 IP 地址 ( $remote_addr),如下:
upstream stream_backend {
hash $remote_addr;
server backend1.example.com:12345;
server backend2.example.com:12345;
server backend3.example.com:12346;
}
哈希負載平衡方法常用于保持會話。指定一個 consistent 選項 可以使用 ketama 一致性hash算法:
hash $remote_addr consistent;
默認采用輪詢算法
nginx stream 中upstream 配置兩個后臺服務器如下:
upstream testjava{
server 192.168.90.20:8443;
server 192.168.90.21:8443;
}
server {
listen 443;
proxy_connect_timeout 1s;
proxy_timeout 3s;
proxy_pass testjava;
}
進行訪問測試 兩個后臺服務器輪流被訪問


一致性 hash 算法測試
nginx.conf stream 模塊 中配置如下
upstream testjava{
hash $remote_addr consistent;
server 192.168.90.20:8443;
server 192.168.90.21:8443;
}
server {
listen 443;
proxy_connect_timeout 1s;
proxy_timeout 3s;
proxy_pass testjava;
}
多次訪問都訪問到同一個后臺服務器,證明會話保持成功

參考文檔:http://www.wjhsh.net/felixzh-p-8696552.html
附:負載均衡四層和七層的區(qū)別
1.區(qū)別:四層負載,說的是基于IP+端口的負載均衡;七層負載,說的是基于WEB請求,URL等應用信息的負載均衡。同理,還有基于二層和三成的。二層的就是基于MAC地址,二層負載均衡會通過一個虛擬MAC地址接受請求,然后再分配到真實的MAC地址。三層負載就是通過一個虛擬IP地址,然后再分配到真實的IP。四層就是通過虛機的IP+端口接收請求,然后再分配到真實的服務器;七層就是通過虛機主機名或者URL接收請求,再根據(jù)一些規(guī)則分配到真實的服務器,常見的應用是nginx。
2.所謂的負載均衡,就是根據(jù)請求的信息不同,來決定怎么樣轉發(fā)流量。四層負載均衡,就是根據(jù)請求的ip+端口,根據(jù)設定的規(guī)則,將請求轉發(fā)到后端對應的IP+端口上。七層負載均衡,則是在四層基礎上,再去考慮應用層的特征。比如說一個WEB服務器的負載均衡,除了根據(jù)IP+80端口來判斷之外,還可以根據(jù)七層URL,瀏覽器類別,來決定如何去轉發(fā)流量。
3.四層交換機主要分析IP層和TCP/UDP層,實現(xiàn)四層流量負載,這種負載不關心七層的應用協(xié)議。七層的交換機除了支持四層之外,還要分析應用層,如HTTP協(xié)議、URL、cookie等信息。四層常見軟件是haproxy,LVS,七層常見軟件是nginx。
總結
到此這篇關于Nginx七層及四層反向代理配置的文章就介紹到這了,更多相關Nginx反向代理配置內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
Nginx配置srcache_nginx模塊搭配Redis建立緩存系統(tǒng)
這篇文章主要介紹了Nginx配置srcache_nginx模塊搭配Redis建立緩存系統(tǒng)的方法,文中關于Nginx模塊和Redis數(shù)據(jù)庫的安裝就不再說明了,這里只關注配置搭建階段,需要的朋友可以參考下2016-01-01
Nginx環(huán)境下WordPress的多站點功能配置詳解
WordPress的多站點功能允許安裝一個WordPress程序的情況下,實現(xiàn)多個站點也就是一套程序,可以綁定多個域名或子域名,本文詳細介紹了在Nginx環(huán)境下WordPress的多站點功能配置方法2018-10-10
Nginx反向代理多域名的HTTP和HTTPS服務的實現(xiàn)
這篇文章主要介紹了Nginx反向代理多域名的HTTP和HTTPS服務的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2020-06-06

