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

Nginx-Apache反向代理配置问题:PHP在8080端口正常但80端口异常

Nginx-Apache反向代理PHP请求失败排查

我的服务器采用Nginx-Apache反向代理架构:

  • 8080端口(Apache)可正常处理PHP文件
  • 80端口(Nginx反向代理)无法加载PHP文件,配置预期是将PHP请求从Nginx转发至Apache,但未生效

以下是当前的site.conf配置文件:

# for security reasons
server {
    listen 80;
    listen [::]:80;
    server_name _;

    root /var/www/html;
    index index.php index.html index.htm;

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

    # PHP Files Processing
    location ~ \.php$ {
        proxy_pass http://127.0.0.1:8080;
        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;
    }

    location ~ /\.ht {
        deny all;
    }
}

# f2.findart.pro
server {
    listen 80 ;
    listen [::]:80 ;
    return 301 https://$host$request_uri;

    root /var/www/f2.findart.pro;
    index index.php index.html index.htm index.nginx-debian.html;
    server_name f2.findart.pro;

    location / {
        try_files $uri $uri/ =404;
        proxy_pass http://127.0.0.1:8080;
        proxy_set_header Host $http_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;
    }
}

# 130-61-139-145.nip.io - free reserve domain - !!! without CDN !!!
server {
    listen 80 ;
    listen [::]:80 ;
    return 301 https://$host$request_uri;

    root /var/www/html;
    index index.php index.html index.htm;
    server_name 130-61-139-145.nip.io;

    location / {
        try_files $uri $uri/ =404;
        proxy_pass http://127.0.0.1:8080;
        proxy_set_header Host $http_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;
    }

    listen [::]:443 ssl; # managed by Certbot
    listen 443 ssl; # managed by Certbot
    ssl_certificate /etc/letsencrypt/live/130-61-139-145.nip.io/fullchain.pem; # managed by Certbot
    ssl_certificate_key /etc/letsencrypt/live/130-61-139-145.nip.io/privkey.pem; # managed by Certbot
    include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot

    location ~ \.php$ {
        proxy_pass http://127.0.0.1:8080;
        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;
    }

    location ~ /\.ht {
        deny all;
    }
}

问题核心原因

  1. 默认80端口server块路由逻辑冲突:location /中的try_files $uri $uri/ =404会优先读取本地文件,当info.php存在于Nginx的root目录时,Nginx会直接返回文件内容,不会转发给Apache解析。
  2. HTTP转HTTPS配置顺序错误:f2.findart.pro和130-61-139-145.nip.io的80端口server块中,return 301语句在location配置之前,导致代理规则完全不生效,所有HTTP请求直接跳转至HTTPS。
  3. HTTPS server块代理逻辑缺失:130-61-139-145.nip.io的HTTPS块中,location /未配置代理,仅单独配置了.php规则,静态资源请求会优先读取本地文件,且路由逻辑不完整。

修复后的配置

# 安全配置:默认80端口server块
server {
    listen 80;
    listen [::]:80;
    server_name _;

    root /var/www/html;
    index index.php index.html index.htm;

    # 优先将所有请求转发至Apache
    location / {
        proxy_pass http://127.0.0.1:8080;
        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;
        # 若Apache返回404,再尝试读取本地文件(可选)
        proxy_intercept_errors on;
        error_page 404 = @fallback;
    }

    # 本地静态文件降级逻辑(可选)
    location @fallback {
        try_files $uri $uri/ =404;
    }

    # 强制匹配PHP请求,确保转发至Apache
    location ~ \.php$ {
        proxy_pass http://127.0.0.1:8080;
        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;
    }

    location ~ /\.ht {
        deny all;
    }
}

# f2.findart.pro:单独处理HTTP转HTTPS
server {
    listen 80;
    listen [::]:80;
    server_name f2.findart.pro;
    return 301 https://$host$request_uri;
}

# f2.findart.pro:HTTPS代理配置
server {
    listen [::]:443 ssl;
    listen 443 ssl;
    server_name f2.findart.pro;

    root /var/www/f2.findart.pro;
    index index.php index.html index.htm index.nginx-debian.html;

    location / {
        proxy_pass http://127.0.0.1:8080;
        proxy_set_header Host $http_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;
    }

    location ~ \.php$ {
        proxy_pass http://127.0.0.1:8080;
        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;
    }

    location ~ /\.ht {
        deny all;
    }

    # 补充SSL证书配置(可通过Certbot生成)
}

# 130-61-139-145.nip.io:单独处理HTTP转HTTPS
server {
    listen 80;
    listen [::]:80;
    server_name 130-61-139-145.nip.io;
    return 301 https://$host$request_uri;
}

# 130-61-139-145.nip.io:HTTPS代理配置
server {
    listen [::]:443 ssl; # managed by Certbot
    listen 443 ssl; # managed by Certbot
    server_name 130-61-139-145.nip.io;

    root /var/www/html;
    index index.php index.html index.htm;

    location / {
        proxy_pass http://127.0.0.1:8080;
        proxy_set_header Host $http_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;
    }

    location ~ \.php$ {
        proxy_pass http://127.0.0.1:8080;
        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;
    }

    location ~ /\.ht {
        deny all;
    }

    ssl_certificate /etc/letsencrypt/live/130-61-139-145.nip.io/fullchain.pem; # managed by Certbot
    ssl_certificate_key /etc/letsencrypt/live/130-61-139-145.nip.io/privkey.pem; # managed by Certbot
    include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
}

修复说明

  1. 拆分HTTP与HTTPS配置:将HTTP跳转逻辑单独放在独立server块,避免和代理规则冲突,确保跳转和代理都能正常生效。
  2. 调整路由优先级:让所有请求优先转发至Apache,而非先读取本地文件,确保PHP请求被Apache解析;若需要保留本地静态文件访问,可通过@fallback实现降级逻辑。
  3. 统一代理规则:所有需要代理的server块都在location /中配置完整代理头,同时保留.php的独立匹配(正则匹配优先级更高),确保PHP请求不会被其他规则拦截。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 08:32:02