核心内容摘要
刘涛:不止于“大”,更在于“开阔”的人生格局
Nginx反向代理的艺术多域名共享80端口的高效实践当你在Windows服务器上同时运行多个Web应用时80端口争夺战往往成为运维人员的噩梦。
IIS默认占据80端口而Tomcat、Node.js等其他服务也不甘示弱。
本文将揭示如何用Nginx作为交通指挥官优雅地解决这一难题。
理解端口共享的核心原理Nginx的反向代理功能就像一位精明的邮局分拣员。
当不同域名的信件请求到达同一个邮箱80端口时它能准确识别收件人地址域名并将信件投递到正确的内部邮箱后端服务端口。
传统做法中我们可能为每个服务分配不同端口如
8081但这既不专业也不友好。
Nginx的方案让所有服务都能以标准HTTP端口80或HTTPS端口443对外提供服务同时保持内部服务的独立性。
关键优势对比方案URL示例专业度SEO友好用户体验多端口domain.com:8080低差需要记忆端口Nginx方案app
domain.com高优完全透明
环境准备与冲突解决在开始配置前我们需要确保80端口可用。
Windows系统中IIS常常是端口占用的罪魁祸首。
释放80端口的实战步骤停止相关服务net stop was /y net stop w3svc禁用HTTP服务自启动sc config http start disabled验证端口释放netstat -ano | findstr :80注意执行这些命令需要管理员权限。
完成后建议重启系统以确保更改生效。
如果遇到System进程占用端口PID4通常是由于HTTP.sys驱动被锁定。
此时可以尝试netsh http show servicestate netsh http delete iplisten ipaddress
0.
0.
0.
Nginx多域名配置精要解压Nginx后核心配置文件conf/nginx.conf是我们施展魔法的画布。
下面是一个支持IIS、Tomcat和Node.js三种服务共存的配置范例http { upstream iis_backend { server
127.
0.
1:8001; } upstream tomcat_backend { server
127.
0.
1:8080; } upstream node_backend { server
127.
0.
1:3000; } server { listen 80; server_name corporate.example.com; location / { proxy_pass http://iis_backend; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; } } server { listen 80; server_name api.example.com; location / { proxy_pass http://tomcat_backend; proxy_set_header Host $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } } server { listen 80; server_name app.example.com; location / { proxy_pass http://node_backend; proxy_http_version
1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection upgrade; } } }配置要点解析upstream定义后端服务集群即使单节点也建议使用此语法每个server块对应一个域名共享80端口proxy_set_header确保后端获取真实客户端信息针对Node.js应用特别处理WebSocket连接
高级优化技巧
1 静态资源加速Nginx处理静态文件的效率远高于大多数应用服务器。
添加以下配置可大幅提升性能location ~* \.(jpg|png|css|js)$ { root /path/to/static/files; expires 30d; access_log off; add_header Cache-Control public; }
2 SSL终端卸载在Nginx层面统一处理HTTPS减轻后端压力server { listen 443 ssl; server_name secure.example.com; ssl_certificate /path/to/cert.pem; ssl_certificate_key /path/to/key.pem; location / { proxy_pass http://backend_service; # 其他代理配置... } }
3 负载均衡配置当单个后端服务有多个实例时Nginx可以自动分配流量upstream iis_cluster { server
192.
168.
10:8001 weight3; server
192.
168.
11:8001; server
192.
168.