nginx搭建IPv6 ->IPv4反向代理服務器的實現(xiàn)
背景
在實際生產(chǎn)過程中,由于各種原因,我們的在線服務搭建在火山云服務器上,使用火山云包括 ECS、CLB、PLB 等組件進行網(wǎng)絡通信,并且通過專線接受來自某公司內(nèi)部流量。但是在大概 22~23 年,某公司要把所有網(wǎng)絡流量變?yōu)?IPv6 往下發(fā),火山云的 CLB 和 PLB 還不支持 IPv6,那我們就面臨著斷流的風險。經(jīng)調(diào)研和學習,了解到可以通過 nginx 來搭建一個反向代理服務里,把 IPv6 的流量轉(zhuǎn)成 IPv4 往下發(fā),這樣就解決了我們的問題。本篇文章也是記錄一下當時的搭建過程和步驟,以及踩過的坑。
搭建步驟
- 在 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
# 設置 nginx 運行的用戶(通常為 nobody 或 www-data)
# user nobody;
# 指定 nginx 的工作進程數(shù)量,auto 表示自動根據(jù) CPU 核心數(shù)調(diào)整
worker_processes auto;
# 設定錯誤日志路徑及日志級別(默認是 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;
# 設置默認的 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;
# 設定連接的 Keep-Alive 超時時間(0 代表關閉 keep-alive)
# keepalive_timeout 0;
keepalive_timeout 120s;
# 設定一個連接內(nèi)最大請求數(shù),避免長連接占用過多資源
keepalive_requests 100000;
# 啟用 gzip 壓縮,提高傳輸效率(默認關閉)
# gzip on;
server {
# 監(jiān)聽 IPv4 80 端口(默認情況下,這行被注釋)
# listen 80;
# 監(jiān)聽 IPv4 443 端口(用于 HTTPS,默認情況下被注釋)
# listen 443;
# 監(jiān)聽 IPv6 80 端口(默認啟用)
listen [::]:80;
# 服務器的域名(需要修改為你的實際域名)
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 造成的連接復用問題)
proxy_http_version 1.1;
# 代理請求時設置 Host 頭,防止后端服務因 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 服務器
proxy_pass http://backend;
}
}
upstream backend {
# 配置上游服務器(負載均衡后端)
# 這里的 IP 為 nginx 下發(fā)流量的后端服務器 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 # 查看服務進程
- 增加定時任務配置,定期清理 nginx 日志
寫個定時任務把 nginx 的日志清一清 /etc/crontab * * * * * root echo 1 > /www/wwwlogs/dimc.byted.org.log * * * * * root echo 1 > /www/wwwlogs/dimc.byted.org.error.log
nginx 配置中最關鍵的參數(shù)
listen [::]:80; # 這里表示你要監(jiān)聽所有 IPv6 的 80 端口流量。
讓 nginx 使用長連接,防止高并發(fā)場景下因連接數(shù)消耗完導致的性能瓶頸。
# 設定連接的 Keep-Alive 超時時間(0 代表關閉 keep-alive) # keepalive_timeout 0; keepalive_timeout 120s; # 設定一個連接內(nèi)最大請求數(shù),避免長連接占用過多資源 keepalive_requests 100000; proxy_http_version 1.1; # 在 http 1.1 版本之后才支持長連接,所以這一點非常重要 proxy_set_header Connection ""; # 設置 Connection 為長連接,默認為 no
到此這篇關于nginx搭建IPv6 ->IPv4反向代理服務器的實現(xiàn)的文章就介紹到這了,更多相關nginx ipv6反向代理ipv4內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
nginx反向代理配置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ù),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下2020-12-12

