nginx监听不同端口配置访问不同的项目

nginx监听不同端口配置访问不同的项目
最新回答
澜小丝光

2026-07-30 19:26:13

通过配置Nginx监听不同端口,可实现同一服务器上不同项目的独立访问。具体步骤如下:

一、编辑Nginx主配置文件
  1. 定位配置文件Nginx主配置文件通常位于/etc/nginx/nginx.conf,部分系统可能使用/etc/nginx/conf.d/default.conf或/etc/nginx/sites-available/目录下的独立文件。建议通过以下命令确认:

    sudo nginx -t # 测试配置文件路径sudo find / -name "nginx.conf" # 全盘搜索配置文件
  2. 进入配置目录

    cd /etc/nginx/
二、配置不同端口的服务器块
  1. 基础语法结构每个项目需独立定义一个server块,通过listen指令指定端口,root指令设置项目根目录。示例配置如下:

    # 项目A配置(监听80端口)server { listen 80; server_name example.com; # 可选:绑定域名 root /var/www/project_a; # 项目A的根目录 index index.html; # 默认访问文件 location / { try_files $uri $uri/ =404; }}# 项目B配置(监听8080端口)server { listen 8080; server_name example.com; # 可选:绑定域名 root /var/www/project_b; # 项目B的根目录 index index.html; location / { try_files $uri $uri/ =404; }}
  2. 关键指令说明

    listen:指定监听端口(如80、443、8080),IPv6需添加[::]:端口。

    root:设置项目文件的绝对路径(如/var/www/project_a)。

    server_name:可选,绑定域名后可通过域名+端口访问(如

    http://example.com:8080
    )。

    location:定义请求处理规则,try_files确保文件存在时返回,否则返回404。

三、配置HTTPS项目(可选)

若需通过443端口访问HTTPS项目,需添加SSL证书配置:

server { listen 443 ssl; server_name example.com; root /var/www/project_b; index index.html; ssl_certificate /path/to/cert.pem; # 证书路径 ssl_certificate_key /path/to/key.pem; # 私钥路径 location / { try_files $uri $uri/ =404; }}四、验证并重启Nginx
  1. 检查配置语法

    sudo nginx -t

    输出syntax is ok和test is successful表示配置正确。

  2. 重启Nginx服务

    sudo systemctl restart nginx # 系统使用systemd时# 或sudo service nginx restart # 旧版系统
五、访问测试
  1. 通过端口直接访问

    项目A:http://服务器IP:80 或

    http://example.com
    (若80端口绑定域名且未配置其他项目)。

    项目B:http://服务器IP:8080 或

    http://example.com:8080
    。

    HTTPS项目:

    https://example.com
    (需443端口配置SSL)。

  2. 防火墙放行端口若服务器启用防火墙,需放行对应端口:

    sudo ufw allow 80/tcp # Ubuntusudo firewall-cmd --add-port=8080/tcp --permanent # CentOSsudo firewall-cmd --reload
六、常见问题排查
  1. 端口冲突

    错误现象:nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)。

    解决方案:使用netstat -tulnp | grep :80查看占用端口的进程,终止后重试。

  2. 路径权限问题

    错误现象:403 Forbidden。

    解决方案:确保Nginx用户(如www-data或nginx)对项目目录有读取权限:sudo chown -R www-data:www-data /var/www/project_asudo chmod -R 755 /var/www/project_a

  3. SELinux限制(CentOS/RHEL)

    错误现象:配置正确但无法访问。

    解决方案:临时放行HTTP服务:sudo setsebool -P httpd_can_network_connect 1

七、高级配置建议
  1. 基于域名的多项目托管若需通过同一端口(如80)访问不同项目,可使用server_name区分域名:

    server { listen 80; server_name project1.example.com; root /var/www/project1;}server { listen 80; server_name project2.example.com; root /var/www/project2;}
  2. 性能优化

    启用Gzip压缩:在http块中添加gzip on;。

    配置缓存:使用expires指令设置静态资源缓存时间。

    负载均衡:通过upstream模块分发请求到多台后端服务器。

通过以上步骤,可高效实现Nginx监听不同端口访问不同项目的需求,同时保障安全性和可扩展性。