nginx作为一款高性能的web服务器和反向代理服务器,默认使用80端口(http)和443端口(https)提供服务。但在实际生产环境中,我们经常需要将nginx配置在其他端口上运行,例如开发环境、测试环境或特殊应用场景。本文将详细介绍如何在nginx中配置使用非默认端口进行服务。
一、为什么需要使用非默认端口
- 多服务共存:当服务器上需要运行多个web服务时
- 权限限制:非root用户无法绑定1024以下端口
- 安全考虑:隐藏服务以减少自动化攻击
- 开发测试:区分生产环境和开发环境
- 特殊应用:如api网关、内部管理界面等
二、配置nginx使用非默认端口的基本方法
2.1 修改listen指令
nginx通过listen
指令指定监听的端口,基本语法如下:
server { listen [端口号]; server_name [域名或ip]; # 其他配置... }
示例1:监听8080端口
server { listen 8080; # 监听8080端口 server_name example.com; root /var/www/example; index index.html; }
示例2:监听特定ip和端口组合
server { listen 192.168.1.100:8080; # 监听特定ip的8080端口 server_name example.com; # 其他配置... }
2.2 多端口监听配置
nginx可以同时监听多个端口:
server { listen 80; listen 8080; listen 8000; server_name example.com; # 其他配置... }
三、不同类型服务的非默认端口配置
3.1 http服务非默认端口配置
server { listen 8080; # 使用8080端口替代默认80端口 server_name example.com; root /var/www/example; index index.html; location / { try_files $uri $uri/ =404; } access_log /var/log/nginx/example.access.log; error_log /var/log/nginx/example.error.log; }
3.2 https服务非默认端口配置
server { listen 8443 ssl; # 使用8443端口替代默认443端口 server_name example.com; ssl_certificate /etc/ssl/certs/example.com.crt; ssl_certificate_key /etc/ssl/private/example.com.key; root /var/www/example; index index.html; # 其他ssl配置... }
3.3 http和https同时配置
# http服务 - 8080端口 server { listen 8080; server_name example.com; return 301 https://$host:8443$request_uri; # 重定向到https } # https服务 - 8443端口 server { listen 8443 ssl; server_name example.com; ssl_certificate /path/to/cert.pem; ssl_certificate_key /path/to/key.pem; # 其他配置... }
四、高级配置技巧
4.1 端口转发配置
将默认端口流量转发到非默认端口:
server { listen 80; server_name example.com; return 301 http://$host:8080$request_uri; } server { listen 443 ssl; server_name example.com; return 301 https://$host:8443$request_uri; }
4.2 基于端口的虚拟主机
# 主网站 - 8080端口 server { listen 8080; server_name example.com; root /var/www/production; # 生产环境配置... } # 测试网站 - 8081端口 server { listen 8081; server_name example.com; root /var/www/staging; # 测试环境配置... }
4.3 结合负载均衡
upstream backend { server backend1.example.com:8000; server backend2.example.com:8001; } server { listen 8080; server_name example.com; location / { proxy_pass http://backend; proxy_set_header host $host; proxy_set_header x-real-ip $remote_addr; } }
五、安全配置建议
5.1 防火墙设置
配置防火墙允许特定端口:
sudo ufw allow 8080/tcp sudo ufw allow 8443/tcp
5.2 selinux配置(如适用)
sudo semanage port -a -t http_port_t -p tcp 8080 sudo semanage port -a -t http_port_t -p tcp 8443
5.3 防止端口扫描
# 非公开服务使用非常用端口 server { listen 64535; server_name internal.example.com; allow 192.168.1.0/24; deny all; # 内部服务配置... }
六、常见问题与解决方案
6.1 端口被占用错误
错误信息:
nginx: [emerg] bind() to 0.0.0.0:8080 failed (98: address already in use)
解决方案:
sudo netstat -tulnp | grep 8080 # 查找占用端口的进程 sudo kill <pid> # 终止占用进程 # 或者 sudo lsof -i :8080
6.2 权限不足错误
错误信息:
nginx: [emerg] bind() to 0.0.0.0:80 failed (13: permission denied)
解决方案:
使用1024以上端口
或以root权限运行nginx
或设置cap_net_bind_service能力:
sudo setcap 'cap_net_bind_service=+ep' /usr/sbin/nginx
6.3 配置后无法访问
检查步骤:
确认nginx配置已重载:
sudo nginx -t && sudo systemctl reload nginx
检查防火墙设置
检查云服务器的安全组规则
测试本地访问:
curl -v http://localhost:8080
七、实际应用场景示例
7.1 开发环境配置
server { listen 3000; server_name dev.example.com; root /var/www/dev; location / { try_files $uri $uri/ /index.html; } # 开发环境特定配置 location /api/ { proxy_pass http://localhost:4000/; } }
7.2 管理后台配置
server { listen 8088; server_name admin.example.com; root /var/www/admin; # 访问控制 allow 192.168.1.0/24; deny all; # 基本认证 auth_basic "admin area"; auth_basic_user_file /etc/nginx/.htpasswd; }
7.3 多应用端口分配方案
应用类型 | 端口范围 | 示例端口 |
---|---|---|
主生产环境 | 80, 443 | - |
开发环境 | 3000-3999 | 3000 |
测试环境 | 4000-4999 | 4000 |
管理后台 | 8000-8099 | 8000 |
api服务 | 9000-9999 | 9000 |
内部工具 | 10000-10999 | 10000 |
八、性能优化建议
连接数调整:
events { worker_connections 1024; }
启用高效传输:
sendfile on; tcp_nopush on; tcp_nodelay on;
缓冲区优化:
client_body_buffer_size 10k; client_header_buffer_size 1k; client_max_body_size 8m; large_client_header_buffers 2 1k;
启用gzip压缩:
gzip on; gzip_types text/plain text/css application/json application/javascript text/xml;
九、总结
在nginx中配置非默认端口服务是一个简单但功能强大的技术,可以满足多种应用场景需求。关键点包括:
- 正确配置
listen
指令指定端口 - 确保防火墙和安全组允许端口通信
- 为不同环境和服务建立规范的端口分配方案
- 实施适当的安全措施保护非标准端口服务
- 进行必要的性能优化
通过灵活运用nginx的端口配置能力,您可以构建更加安全、灵活的服务架构,满足各种复杂的业务需求。
到此这篇关于nginx中配置使用非默认80端口进行服务的完整指南的文章就介绍到这了,更多相关nginx配置非默认80端口内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
发表评论