如何使用nginx把两个应用分别部署到不同的域名

如果你有两个不同的应用,一个是php+pfm的应用,一个是Java+springboot的应用,你需要把两个应用通过同一个nginx给部署到不同的域名下,该如何处理呢?

通过Deepseek or doubao, 你可以找到答案,这里是手把手的真实实现过程,分享出来。

首先明确思路,

  1. 可以通过nginx的server块,监听80端口
  2. php的应用,使用fastcgi_pass转发应用到app1.domain.com下
  3. springboot应用,通过proxy_pass反向代理到Java应用的8080端口,使用app2.domain.com
  4. 设置不要的http header, 保证后端服务能正确识别到客户端信息

核心配置块for app1:

    # 配置 (app1.xxxx.com)
    server {
        listen       80;
        server_name  app1.xxxx.com;  # 域名
        root         /var/www/html; # (需和容器内路径一致)
        index        index.php index.html index.htm;

        # 静态文件缓存
        location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ {
            expires 30d;
            add_header Cache-Control "public, max-age=2592000";
        }

        # PHP-FPM 转发配置
        location ~ \.php$ {
            try_files $uri =404;
            fastcgi_pass 127.0.0.1:9000;  # WordPress 容器名:端口
            fastcgi_index index.php;
            fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
            include fastcgi_params;
            
            # 必要的 WordPress 环境变量
            fastcgi_param HTTP_HOST $host;
            fastcgi_param REMOTE_ADDR $remote_addr;
        }

        # 通用请求处理
        location / {
            try_files $uri $uri/ /index.php?$args;
        }

        # 日志配置
        access_log /var/log/nginx/app1.access.log main;
        error_log /var/log/nginx/app1.error.log;
    }




核心配置for app2:

# SpringBoot 站点配置 (app2.xxxx.com)
    server {
        listen       80;
        server_name  app2.xxxx.com;  # SpringBoot 域名

        # 反向代理配置
        location / {
            proxy_pass http://springboot-app:8080;  # SpringBoot 容器名:端口
            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_set_header X-Forwarded-Proto $scheme;
            proxy_connect_timeout 60s;
            proxy_read_timeout 60s;
        }

        # 日志配置
        access_log /var/log/nginx/app2.access.log main;
        error_log /var/log/nginx/app2.error.log;
    }

但是如果使用docker部署nginx, 则需要把两个应用的配置共用80端口,可以通过server_name来区分不同的域名和应用。

需要注意的是:两个域名的解析需要指向nginx所在服务器的IP。

About

You may also like...

Your email will not be published. Name and Email fields are required