我有一个运行 nginx 的 ec2 实例。
这是我的 nginx 配置:
server {
listen 443 ssl;
root /var/www/angular/dist/testenpoint-website-angular;
index index.htm index.html;
server_name www.testenpoint.com;
client_max_body_size 100m;
location / {
try_files $uri $uri/ /index.html;
}
location /applicationApis/ {
root /var/www/html;
try_files $uri $uri/ =404;
include fastcgi_params;
fastcgi_pass unix:/run/php-fpm/www.sock;
fastcgi_param SCRIPT_FILENAME $document_root/$fastcgi_script_name;
}
error_page 404 /404.html;
location = /40x.html {
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
}
ssl_certificate /etc/letsencrypt/live/testenpoint-all/fullchain.pem; # managed by Certbot
ssl_certificate_key /etc/letsencrypt/live/testenpoint-all/privkey.pem; # managed by Certbot
}
server {
if ($host = testenpoint.com) {
return 301 https://$host$request_uri;
} # managed by Certbot
if ($host = www.testenpoint.com) {
return 301 https://$host$request_uri;
} # managed by Certbot
listen 80; #listen for all the HTTP requests
server_name testenpoint.com www.testenpoint.com;
return 301 https://www.testenpoint.com$request_uri;
}
server {
if ($host = testenpoint.co.uk) {
return 301 https://www.testenpoint.com$request_uri;
} # managed by Certbot
if ($host = www.testenpoint.co.uk) {
return 301 https://www.testenpoint.com$request_uri;
} # managed by Certbot
listen 80;
server_name testenpoint.co.uk *.testenpoint.co.uk;
return 301 https://www.testenpoint.com$request_uri;
}
server {
listen 443;
server_name testenpoint.co.uk *.testenpoint.co.uk;
return 301 https://www.testenpoint.com$request_uri;
}
我通过我的角度应用程序调用它,如下所示:
https://www.testenpoint.com/applicationApis/getPdfReport.php
请求中会发送 auth 标头,并在正文中发送一些参数。一个参数称为“filterObject”,这是一个字符串对象。当它为空时,请求没有问题。当我通过 angular 应用程序向其中发送内容时,我得到了 404 响应。通过 postman,没有问题。通过我的测试实例也没有问题。
当发生这种情况时,我的 nginx 日志中会出现此错误:
2023/01/03 19:28:50 [error] 24875#0: *42 upstream sent too big header while reading response header from upstream, client: xx.xx.xxx.xxx, server: www.testenpoint.com, request: "POST /applicationApis/getPdfReport.php HTTP/1.1", upstream: "fastcgi://unix:/run/php-fpm/www.sock:", host: "www.testenpoint.com", referrer: "http://localhost:4200/"
和
2023/01/03 19:28:50 [error] 24875#0: *42 open() "/var/www/angular/dist/my-website-angular/50x.html" failed (2: No such file or directory), client: xx.xx.xx.xx, server: www.testenpoint.com, request: "POST /applicationApis/getPdfReport.php HTTP/1.1", upstream: "fastcgi://unix:/run/php-fpm/www.sock", host: "www.testenpoint.com", referrer: "http://localhost:4200/"
我想知道是否有人可以帮忙?
还要注意的是,PHP 代码确实运行了,因为我可以看到日志等,直到完成。但我得到的只是 404,尽管我的 PHP 代码没有显示任何错误。我相信这是一个 Nginx 配置问题,它只发生在这个配置的实例上,而不是我的配置略有不同的测试实例上
答案1
如果您启用了 fastcgi,则必须在位置部分添加:
fastcgi_buffers 16 32k;
fastcgi_buffer_size 64k;
fastcgi_busy_buffers_size 64k;
答案2
您需要编辑代理缓冲区设置。本文将帮助您:https://ma.ttias.be/nginx-proxy-upstream-sent-big-header-reading-response-header-upstream/
然后重新加载nginx。
答案3
您需要确定产生原始错误的请求的处理位置。“上游”可能有很多不同的东西(代理、fastcgi、uwsgi)。
您需要调整适当的上游 *_buffers 和 *_buffer_size 以使适当的缓冲区变得更大。
您可以设置以下值并测试它是否有效。如果不行,您可以手动将值增加到 64k、128k、256k 和 512k。然后重新加载 nginx。
*_buffers 16 32k;
*_buffer_size 64k;
*_busy_buffers_size 64k;