You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Nginx+Apache2架构admin.site.ru返回502 Bad Gateway故障排查

故障场景说明

现有两个站点site.ru与admin.site.ru部署在同一IP地址下:site.ru基于Yii2框架开发,admin.site.ru基于Laravel框架开发,整体采用Nginx + Apache2组合架构配置。

现有配置

Apache2配置

site.ru对应虚拟主机配置(监听8081端口)

<IfModule mod_ssl.c>
<VirtualHost *:8081>
    ServerAdmin webmaster@localhost

    DocumentRoot /var/www/site.ru

    ServerName site.ru

    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined

    SSLEngine on
    SSLCertificateFile /etc/letsencrypt/live/site.ru/cert.pem
    SSLCertificateKeyFile /etc/letsencrypt/live/site.ru/privkey.pem
    SSLCACertificateFile /etc/letsencrypt/live/site.ru/chain.pem

    <FilesMatch "\.(cgi|shtml|phtml|php)$">
            SSLOptions +StdEnvVars
    </FilesMatch>
    <Directory /usr/lib/cgi-bin>
            SSLOptions +StdEnvVars
    </Directory>

    <Directory /var/www/site.ru>
            AllowOverride All
    </Directory>

</VirtualHost>

admin.site.ru对应虚拟主机配置(监听8083端口)

<IfModule mod_ssl.c>
<VirtualHost *:8083>
    ServerAdmin webmaster@localhost

    DocumentRoot /var/www/admin.site.ru/public

    ServerName admin.site.ru

    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined

    SSLEngine on
    SSLCertificateFile /etc/letsencrypt/live/admin.site.ru/cert.pem
    SSLCertificateKeyFile /etc/letsencrypt/live/admin.site.ru/privkey.pem
    SSLCACertificateFile /etc/letsencrypt/live/admin.site.ru/chain.pem

    <FilesMatch "\.(cgi|shtml|phtml|php)$">
            SSLOptions +StdEnvVars
    </FilesMatch>
    <Directory /usr/lib/cgi-bin>
            SSLOptions +StdEnvVars
    </Directory>

    <Directory /var/www/admin.site.ru>
            AllowOverride All
    </Directory>

</VirtualHost>

Nginx配置

server { 
 listen 80 default_server; 
 listen [::]:80 default_server; 
 return 301 https://$host$request_uri;
}

server {
 listen 443 ssl http2;
 listen [::]:443 ssl http2;

 ssl on;
 ssl_certificate /etc/letsencrypt/live/admin.site.ru/fullchain.pem;
 ssl_certificate_key /etc/letsencrypt/live/admin.site.ru/privkey.pem; 

 root /var/www/admin.site.ru/public;
 index index.php index.html index.htm index.nginx-debian.html;
 server_name admin.site.ru;

 location / {
      proxy_pass https://{IP_SERVER}:8083;
      proxy_buffering off;
      proxy_set_header Host $host;
      proxy_set_header X-Real-IP $remote_addr;
      proxy_set_header X-Accel-Internal /nginx_static_files;
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
      proxy_set_header X-Forwarded-Proto $scheme;
 }

 location /nginx_static_files/ {
      alias /var/www/admin.site.ru/;
      internal;
 }

 location ~ /(\.ht|\.user\.ini) {
      deny all;
 }
}

server {
 listen 443 ssl http2;
 listen [::]:443 ssl http2;

 ssl on;
 # ssl_certificate /etc/ssl/certs/ssl-cert-snakeoil.pem;
 # ssl_certificate_key /etc/ssl/private/ssl-cert-snakeoil.key;
 ssl_certificate /etc/letsencrypt/live/site.ru/fullchain.pem;
 ssl_certificate_key /etc/letsencrypt/live/site.ru/privkey.pem; 

 root /var/www/site.ru;
 index index.php index.html index.htm index.nginx-debian.html;
 server_name site.ru;

 location / {
      proxy_pass https://{IP_SERVER}:8081;
      proxy_buffering off;
      proxy_set_header Host $host;
      proxy_set_header X-Real-IP $remote_addr;
      proxy_set_header X-Accel-Internal /nginx_static_files;
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
      proxy_set_header X-Forwarded-Proto $scheme;
 }

 location /nginx_static_files/ {
      alias /var/www/site.ru/;
      internal;
 }

 location ~ /(\.ht|\.user\.ini) {
      deny all;
 }
}
故障现象

当前site.ru访问运行正常,但admin.site.ru访问时返回502 Bad Gateway错误。

故障排查方向及根因

502错误本质是Nginx作为反向代理,无法正常从后端Apache服务获取响应,结合两个站点同架构、只有admin站点异常的特征,按以下优先级排查:

  • 确认Apache 8083端口监听状态
    执行命令ss -tulpn | grep 8083检查端口是否被Apache正常监听。site.ru对应的8081端口正常、8083无监听的话,说明admin站点的Apache虚拟主机配置未生效,常见原因是配置语法错误、配置文件未被Apache加载(比如Debian/Ubuntu系统下未执行a2ensite命令启用该虚拟主机配置,或配置文件后缀不符合Apache加载规则)。
    验证方式:执行apache2ctl configtest检查配置语法,确认无报错后重启Apache服务,再确认端口监听状态。
  • 检查Apache 8083端口的SSL握手兼容性
    架构中Nginx到Apache走HTTPS协议回源,site.ru正常说明Nginx的SSL代理回源逻辑本身没问题,需要确认admin站点在Apache侧的证书路径是否正确、证书文件权限是否允许Apache进程读取。如果证书路径配置错误、文件权限不足,Apache启动8083端口的SSL服务时会直接失败,导致端口无响应。
    验证方式:在服务器本地执行curl -vk https://127.0.0.1:8083,如果直接返回连接拒绝/SSL握手错误,就对应上面的端口监听/证书配置问题;如果能正常返回页面内容,说明Apache侧配置正常,问题出在Nginx回源逻辑。
  • 排查Nginx回源参数问题
    当前Nginx配置中回源地址写的是https://{IP_SERVER}:8083,如果{IP_SERVER}是公网IP,需要确认服务器本地访问自身公网IP的8083端口是否被防火墙、安全组规则拦截;另外如果Nginx回源时没有配置关闭后端SSL证书校验,当Apache侧证书和回源IP不匹配时,也会触发SSL校验失败导致502。
    修复方式:回源地址直接写https://127.0.0.1:8083走本地回环,同时在admin站点的Nginx代理配置中添加proxy_ssl_verify off;参数,跳过回源时的SSL证书校验,配置重载后即可恢复。
  • 检查站点目录权限
    确认/var/www/admin.site.ru目录及下属文件的属主、权限符合Apache运行用户的读取要求,Laravel框架的storage、bootstrap/cache目录需要写入权限,权限配置错误会导致Apache处理请求时抛出异常,但这类问题一般不会直接触发502,通常返回500错误,优先级低于前面三项。

内容的提问来源于stack exchange,提问作者Roman Adigezalov

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 01:12:30