nginx搭建IPv6 ->IPv4反向代理服務(wù)器的實(shí)現(xiàn)
背景
在實(shí)際生產(chǎn)過程中,由于各種原因,我們的在線服務(wù)搭建在火山云服務(wù)器上,使用火山云包括 ECS、CLB、PLB 等組件進(jìn)行網(wǎng)絡(luò)通信,并且通過專線接受來自某公司內(nèi)部流量。但是在大概 22~23 年,某公司要把所有網(wǎng)絡(luò)流量變?yōu)?IPv6 往下發(fā),火山云的 CLB 和 PLB 還不支持 IPv6,那我們就面臨著斷流的風(fēng)險(xiǎn)。經(jīng)調(diào)研和學(xué)習(xí),了解到可以通過 nginx 來搭建一個(gè)反向代理服務(wù)里,把 IPv6 的流量轉(zhuǎn)成 IPv4 往下發(fā),這樣就解決了我們的問題。本篇文章也是記錄一下當(dāng)時(shí)的搭建過程和步驟,以及踩過的坑。
搭建步驟
- 在 nginx 官網(wǎng)下載穩(wěn)定版本的 nginx 包。https://nginx.org/en/download.html
- 解壓。
sudo tar -zxvf nginx-1.18.0.tar.gz
- 進(jìn)入 nginx 目錄并進(jìn)行安裝。
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 運(yùn)行的用戶(通常為 nobody 或 www-data)
# user nobody;
# 指定 nginx 的工作進(jìn)程數(shù)量,auto 表示自動(dòng)根據(jù) CPU 核心數(shù)調(diào)整
worker_processes auto;
# 設(shè)定錯(cuò)誤日志路徑及日志級(jí)別(默認(rèn)是 error,可選 notice、info 等)
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
# 指定 nginx 運(yùn)行時(shí)的 PID 文件存放路徑
# pid logs/nginx.pid;
events {
# 每個(gè) worker 進(jìn)程允許的最大并發(fā)連接數(shù)
worker_connections 65535;
}
http {
# 引入 MIME 類型配置文件,確保 nginx 識(shí)別各種文件類型
include mime.types;
# 設(shè)置默認(rèn)的 MIME 類型,避免未識(shí)別的文件變成純文本
default_type application/octet-stream;
# 定義日志格式($remote_addr:客戶端 IP,$request:請(qǐng)求內(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"';
# 指定訪問日志存儲(chǔ)路徑及使用的日志格式
# access_log logs/access.log main;
# 啟用 sendfile 以優(yōu)化文件傳輸性能
sendfile on;
# 結(jié)合 sendfile 使用,減少 TCP 發(fā)送延遲(但可能影響小數(shù)據(jù)包傳輸)
# tcp_nopush on;
# 設(shè)定連接的 Keep-Alive 超時(shí)時(shí)間(0 代表關(guān)閉 keep-alive)
# keepalive_timeout 0;
keepalive_timeout 120s;
# 設(shè)定一個(gè)連接內(nèi)最大請(qǐng)求數(shù),避免長(zhǎng)連接占用過多資源
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ù)器的域名(需要修改為你的實(shí)際域名)
server_name aaa.bbb.ccc;
# 訪問日志存儲(chǔ)路徑
access_log /www/wwwlogs/aaa.bbb.ccc.log;
# 錯(cuò)誤日志存儲(chǔ)路徑
error_log /www/wwwlogs/aaa.bbb.ccc.error.log;
location / {
# 代理請(qǐng)求使用 HTTP/1.1(避免 HTTP/1.0 造成的連接復(fù)用問題)
proxy_http_version 1.1;
# 代理請(qǐng)求時(shí)設(shè)置 Host 頭,防止后端服務(wù)因 Host 變更異常
proxy_set_header Host aaa.bbb.ccc:80;
# 傳遞客戶端真實(shí) IP
proxy_set_header X-Real-IP $remote_addr;
# 清空 Connection 頭,防止 nginx 誤處理長(zhǎng)連接
proxy_set_header Connection "";
# 傳遞客戶端遠(yuǎn)程地址(用于后端日志分析)
proxy_set_header REMOTE-HOST $remote_addr;
# 傳遞 X-Forwarded-For,記錄代理鏈中的所有 IP
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
# 代理請(qǐng)求轉(zhuǎn)發(fā)到 upstream 定義的 backend 服務(wù)器
proxy_pass http://backend;
}
}
upstream backend {
# 配置上游服務(wù)器(負(fù)載均衡后端)
# 這里的 IP 為 nginx 下發(fā)流量的后端服務(wù)器 IP(可以添加多個(gè))
server 192.0.0.1:80 weight=10 max_fails=5;
# keepalive 連接池大小,減少 TCP 連接建立的開銷
keepalive 100000;
}
}
- 啟動(dòng) 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ù)進(jìn)程
- 增加定時(shí)任務(wù)配置,定期清理 nginx 日志
寫個(gè)定時(shí)任務(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 使用長(zhǎng)連接,防止高并發(fā)場(chǎng)景下因連接數(shù)消耗完導(dǎo)致的性能瓶頸。
# 設(shè)定連接的 Keep-Alive 超時(shí)時(shí)間(0 代表關(guān)閉 keep-alive) # keepalive_timeout 0; keepalive_timeout 120s; # 設(shè)定一個(gè)連接內(nèi)最大請(qǐng)求數(shù),避免長(zhǎng)連接占用過多資源 keepalive_requests 100000; proxy_http_version 1.1; # 在 http 1.1 版本之后才支持長(zhǎng)連接,所以這一點(diǎn)非常重要 proxy_set_header Connection ""; # 設(shè)置 Connection 為長(zhǎng)連接,默認(rèn)為 no
到此這篇關(guān)于nginx搭建IPv6 ->IPv4反向代理服務(wù)器的實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)nginx ipv6反向代理ipv4內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
從安全加固到性能調(diào)優(yōu)詳解Nginx中生產(chǎn)環(huán)境配置的完全指南
本文系統(tǒng)梳理了Nginx在生產(chǎn)環(huán)境中常用的配置項(xiàng),每個(gè)配置都附帶解決的問題和實(shí)際應(yīng)用場(chǎng)景,幫助你構(gòu)建健壯,安全,高性能的Web服務(wù),有需要的小伙伴可以參考下2026-04-04
Nginx通過代理服務(wù)器訪問目標(biāo)接口的實(shí)現(xiàn)
本文主要介紹了Nginx通過代理服務(wù)器訪問目標(biāo)接口的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2024-08-08
Keepalived如何實(shí)現(xiàn)Nginx高可用
這篇文章主要介紹了Keepalived如何實(shí)現(xiàn)Nginx高可用,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-10-10
Nginx使用Prometheus+Grafana實(shí)現(xiàn)日志分析與監(jiān)控
文章介紹了如何使用Prometheus和Grafana對(duì)Nginx進(jìn)行日志分析和監(jiān)控,創(chuàng)建儀表盤來展示Nginx的性能指標(biāo),通過這個(gè)過程,可以實(shí)現(xiàn)對(duì)Nginx的實(shí)時(shí)監(jiān)控和性能分析,及時(shí)發(fā)現(xiàn)并解決潛在問題,感興趣的朋友跟隨小編一起看看吧2025-12-12
詳解Nginx服務(wù)器中配置Sysguard模塊預(yù)防高負(fù)載的方案
這篇文章主要介紹了詳解Nginx服務(wù)器中配置Sysguard模塊預(yù)防高負(fù)載的方案,該模塊由阿里巴巴的團(tuán)隊(duì)開發(fā),能夠設(shè)置負(fù)載閥值,比較強(qiáng)大,需要的朋友可以參考下2016-01-01
Nginx代理Redis哨兵主從配置的實(shí)現(xiàn)
本文主要介紹了Nginx代理Redis哨兵主從配置的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-07-07
在Ubuntu上配置Nginx實(shí)現(xiàn)開機(jī)自啟功能
本文主要介紹了在Ubuntu上配置Nginx實(shí)現(xiàn)開機(jī)自啟功能,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2025-09-09

