如果你有两个不同的应用,一个是php+pfm的应用,一个是Java+springboot的应用,你需要把两个应用通过同一个nginx给部署到不同的域名下,该如何处理呢?
通过Deepseek or doubao, 你可以找到答案,这里是手把手的真实实现过程,分享出来。
首先明确思路,
- 可以通过nginx的server块,监听80端口
- php的应用,使用fastcgi_pass转发应用到app1.domain.com下
- springboot应用,通过proxy_pass反向代理到Java应用的8080端口,使用app2.domain.com
- 设置不要的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。


