nginx搭建IPv6 ->IPv4反向代理服務(wù)器的實現(xiàn)
背景
在實際生產(chǎn)過程中,由于各種原因,我們的在線服務(wù)搭建在火山云服務(wù)器上,使用火山云包括 ECS、CLB、PLB 等組件進行網(wǎng)絡(luò)通信,并且通過專線接受來自某公司內(nèi)部流量。但是在大概 22~23 年,某公司要把所有網(wǎng)絡(luò)流量變?yōu)?IPv6 往下發(fā),火山云的 CLB 和 PLB 還不支持 IPv6,那我們就面臨著斷流的風(fēng)險。經(jīng)調(diào)研和學(xué)習(xí),了解到可以通過 nginx 來搭建一個反向代理服務(wù)里,把 IPv6 的流量轉(zhuǎn)成 IPv4 往下發(fā),這樣就解決了我們的問題。本篇文章也是記錄一下當(dāng)時的搭建過程和步驟,以及踩過的坑。
搭建步驟
- 在 nginx 官網(wǎng)下載穩(wěn)定版本的 nginx 包。https://nginx.org/en/download.html
- 解壓。
sudo tar -zxvf nginx-1.18.0.tar.gz
- 進入 nginx 目錄并進行安裝。
cd nginx-1.18.0 apt-get update sudo apt-get install libpcre3-dev ./configure --prefix=/usr/local/nginx --with-stream make # 編譯 make install # 安裝
- 修改 nginx 配置信息。
cd ../conf cp nginx.conf nginx.conf.bak vim nginx.conf
# 設(shè)置 nginx 運行的用戶(通常為 nobody 或 www-data) # user nobody; # 指定 nginx 的工作進程數(shù)量,auto 表示自動根據(jù) CPU 核心數(shù)調(diào)整 worker_processes auto; # 設(shè)定錯誤日志路徑及日志級別(默認(rèn)是 error,可選 notice、info 等) #error_log logs/error.log; #error_log logs/error.log notice; #error_log logs/error.log info; # 指定 nginx 運行時的 PID 文件存放路徑 # pid logs/nginx.pid; events { # 每個 worker 進程允許的最大并發(fā)連接數(shù) worker_connections 65535; } http { # 引入 MIME 類型配置文件,確保 nginx 識別各種文件類型 include mime.types; # 設(shè)置默認(rèn)的 MIME 類型,避免未識別的文件變成純文本 default_type application/octet-stream; # 定義日志格式($remote_addr:客戶端 IP,$request:請求內(nèi)容,$status:狀態(tài)碼等) # 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 logs/access.log main; # 啟用 sendfile 以優(yōu)化文件傳輸性能 sendfile on; # 結(jié)合 sendfile 使用,減少 TCP 發(fā)送延遲(但可能影響小數(shù)據(jù)包傳輸) # tcp_nopush on; # 設(shè)定連接的 Keep-Alive 超時時間(0 代表關(guān)閉 keep-alive) # keepalive_timeout 0; keepalive_timeout 120s; # 設(shè)定一個連接內(nèi)最大請求數(shù),避免長連接占用過多資源 keepalive_requests 100000; # 啟用 gzip 壓縮,提高傳輸效率(默認(rèn)關(guān)閉) # gzip on; server { # 監(jiān)聽 IPv4 80 端口(默認(rèn)情況下,這行被注釋) # listen 80; # 監(jiān)聽 IPv4 443 端口(用于 HTTPS,默認(rèn)情況下被注釋) # listen 443; # 監(jiān)聽 IPv6 80 端口(默認(rèn)啟用) listen [::]:80; # 服務(wù)器的域名(需要修改為你的實際域名) server_name aaa.bbb.ccc; # 訪問日志存儲路徑 access_log /www/wwwlogs/aaa.bbb.ccc.log; # 錯誤日志存儲路徑 error_log /www/wwwlogs/aaa.bbb.ccc.error.log; location / { # 代理請求使用 HTTP/1.1(避免 HTTP/1.0 造成的連接復(fù)用問題) proxy_http_version 1.1; # 代理請求時設(shè)置 Host 頭,防止后端服務(wù)因 Host 變更異常 proxy_set_header Host aaa.bbb.ccc:80; # 傳遞客戶端真實 IP proxy_set_header X-Real-IP $remote_addr; # 清空 Connection 頭,防止 nginx 誤處理長連接 proxy_set_header Connection ""; # 傳遞客戶端遠程地址(用于后端日志分析) proxy_set_header REMOTE-HOST $remote_addr; # 傳遞 X-Forwarded-For,記錄代理鏈中的所有 IP proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; # 代理請求轉(zhuǎn)發(fā)到 upstream 定義的 backend 服務(wù)器 proxy_pass http://backend; } } upstream backend { # 配置上游服務(wù)器(負載均衡后端) # 這里的 IP 為 nginx 下發(fā)流量的后端服務(wù)器 IP(可以添加多個) server 192.0.0.1:80 weight=10 max_fails=5; # keepalive 連接池大小,減少 TCP 連接建立的開銷 keepalive 100000; } }
- 啟動 nginx
mkdir -p /www/wwwlogs /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx -s stop /usr/local/nginx/sbin/nginx -s reload ps -ef | grep nginx # 查看服務(wù)進程
- 增加定時任務(wù)配置,定期清理 nginx 日志
寫個定時任務(wù)把 nginx 的日志清一清 /etc/crontab * * * * * root echo 1 > /www/wwwlogs/dimc.byted.org.log * * * * * root echo 1 > /www/wwwlogs/dimc.byted.org.error.log
nginx 配置中最關(guān)鍵的參數(shù)
listen [::]:80; # 這里表示你要監(jiān)聽所有 IPv6 的 80 端口流量。
讓 nginx 使用長連接,防止高并發(fā)場景下因連接數(shù)消耗完導(dǎo)致的性能瓶頸。
# 設(shè)定連接的 Keep-Alive 超時時間(0 代表關(guān)閉 keep-alive) # keepalive_timeout 0; keepalive_timeout 120s; # 設(shè)定一個連接內(nèi)最大請求數(shù),避免長連接占用過多資源 keepalive_requests 100000; proxy_http_version 1.1; # 在 http 1.1 版本之后才支持長連接,所以這一點非常重要 proxy_set_header Connection ""; # 設(shè)置 Connection 為長連接,默認(rèn)為 no
到此這篇關(guān)于nginx搭建IPv6 ->IPv4反向代理服務(wù)器的實現(xiàn)的文章就介紹到這了,更多相關(guān)nginx ipv6反向代理ipv4內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- Nginx作為反向代理時傳遞客戶端IP的設(shè)置方法
- Nginx反向代理proxy_cache_path directive is not allowed錯誤解決方法
- Nginx服務(wù)器作反向代理實現(xiàn)內(nèi)部局域網(wǎng)的url轉(zhuǎn)發(fā)配置
- Nginx反向代理websocket配置實例
- 使用Nginx反向代理與proxy_cache緩存搭建CDN服務(wù)器的配置方法
- Nginx 反向代理并緩存及緩存清除的方法
- 詳解Nginx反向代理實現(xiàn)會話(session)保持的兩種方式
- nginx https反向代理tomcat的2種實現(xiàn)方法
相關(guān)文章
使用nginx緩存服務(wù)器上靜態(tài)文件的設(shè)置方法
這篇文章主要介紹了使用nginx緩存服務(wù)器上的靜態(tài)文件,文中給大家提到了nginx緩存的優(yōu)點及設(shè)置方法,通過實例相結(jié)合的形式給大家介紹的非常詳細,需要的朋友可以參考下2018-05-05nginx反向代理配置400,404,502等狀態(tài)的自定義頁面問題
這篇文章主要介紹了nginx反向代理配置400,404,502等狀態(tài)的自定義頁面問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-01-01在Linux系統(tǒng)中將Redmine和SVN整合入Nginx的方法
這篇文章主要介紹了在Linux系統(tǒng)中將Redmine和SVN整合入Nginx的方法,示例基于CentOS系統(tǒng),并用到了Ruby腳本,需要的朋友可以參考下2015-06-06基于Nginx實現(xiàn)限制某IP短時間訪問次數(shù)
這篇文章主要介紹了基于Nginx實現(xiàn)限制某IP短時間訪問次數(shù),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2020-12-12