在Nginx中配置非80端口的端口转发(反向代理)是一个常见需求,以下是详细配置方法:
/etc/nginx/conf.d/
或/etc/nginx/sites-available/
目录下)server {
listen 8080; # 监听的端口号(非80端口)
server_name yourdomain.com; # 你的域名或IP地址
location / {
proxy_pass http://backend_server:port; # 转发到后端服务器的地址和端口
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
假设你要将访问8080
端口的请求转发到本地3000
端口运行的Node.js应用:
server {
listen 8080;
server_name example.com;
access_log /var/log/nginx/example.access.log;
error_log /var/log/nginx/example.error.log;
location / {
proxy_pass http://127.0.0.1:3000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_cache_bypass $http_upgrade;
}
}
如果需要将多个端口转发到不同后端服务:
# 转发8080到3000端口
server {
listen 8080;
server_name example.com;
location / {
proxy_pass http://127.0.0.1:3000;
# 其他proxy设置...
}
}
# 转发8081到4000端口
server {
listen 8081;
server_name example.com;
location / {
proxy_pass http://127.0.0.1:4000;
# 其他proxy设置...
}
}
sudo nginx -t
sudo systemctl reload nginx
# 或
sudo service nginx reload
bash
sudo semanage port -a -t http_port_t -p tcp 8080
Upgrade
和Connection
头proxy_pass
使用https://
location / {
proxy_pass http://backend;
proxy_redirect off;
proxy_buffering off;
proxy_connect_timeout 90;
proxy_send_timeout 90;
proxy_read_timeout 90;
proxy_buffer_size 4k;
proxy_buffers 4 32k;
proxy_busy_buffers_size 64k;
proxy_temp_file_write_size 64k;
}
通过以上配置,你可以灵活地将Nginx配置为监听非80端口并将请求转发到其他端口或服务器。