插件窝 干货文章 nginx监听不同端口配置访问不同的项目

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

Nginx 配置 server 端口 729    来源:    2025-04-03

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

在Nginx中配置监听不同端口来访问不同的项目是一种常见的部署方式。以下是详细的配置方法:

基本配置方法

1. 单个配置文件方式

nginx.confsites-available/default文件中添加多个server块:

# 第一个项目监听8080端口
server {
    listen 8080;
    server_name localhost;

    root /var/www/project1;
    index index.html;

    location / {
        try_files $uri $uri/ =404;
    }
}

# 第二个项目监听8081端口
server {
    listen 8081;
    server_name localhost;

    root /var/www/project2;
    index index.html;

    location / {
        try_files $uri $uri/ =404;
    }
}

2. 多个配置文件方式(推荐)

更推荐的方式是为每个项目创建单独的配置文件:

  1. /etc/nginx/sites-available/目录下创建两个配置文件:

    • project1.conf
    • project2.conf
  2. project1.conf内容:

server {
    listen 8080;
    server_name localhost;

    root /var/www/project1;
    index index.html;

    location / {
        try_files $uri $uri/ =404;
    }
}
  1. project2.conf内容:
server {
    listen 8081;
    server_name localhost;

    root /var/www/project2;
    index index.html;

    location / {
        try_files $uri $uri/ =404;
    }
}
  1. 创建符号链接到sites-enabled目录:
sudo ln -s /etc/nginx/sites-available/project1.conf /etc/nginx/sites-enabled/
sudo ln -s /etc/nginx/sites-available/project2.conf /etc/nginx/sites-enabled/
  1. 测试并重新加载Nginx配置:
sudo nginx -t
sudo systemctl reload nginx

高级配置示例

1. 带反向代理的配置

如果项目是运行在不同端口的应用服务器:

# 项目1 - Node.js应用运行在3000端口
server {
    listen 8080;
    server_name localhost;

    location / {
        proxy_pass http://localhost:3000;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
    }
}

# 项目2 - Python Flask应用运行在5000端口
server {
    listen 8081;
    server_name localhost;

    location / {
        proxy_pass http://localhost:5000;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
    }
}

2. 带SSL/TLS的配置

# HTTP重定向到HTTPS
server {
    listen 8080;
    server_name example.com;
    return 301 https://$host$request_uri;
}

# HTTPS配置
server {
    listen 8443 ssl;
    server_name example.com;

    ssl_certificate /path/to/cert.pem;
    ssl_certificate_key /path/to/key.pem;

    root /var/www/project1;
    index index.html;

    location / {
        try_files $uri $uri/ =404;
    }
}

常见问题解决

  1. 端口无法访问

    • 检查防火墙设置:sudo ufw allow 8080/tcp
    • 确认Nginx是否监听端口:sudo netstat -tulnp | grep nginx
  2. 配置冲突

    • 确保没有多个server块监听同一个端口
    • 检查是否有其他服务占用了配置的端口
  3. 权限问题

    • 确保Nginx用户有权限访问项目目录:sudo chown -R www-data:www-data /var/www/project1
  4. 配置测试

    • 每次修改后运行sudo nginx -t测试配置
    • 使用sudo systemctl restart nginxsudo systemctl reload nginx应用更改

通过以上配置,你可以轻松实现Nginx监听不同端口来服务不同的项目。