我有一个非常奇怪的问题,我有一个服务器运行 nginx 作为 PHP 的反向代理。
在前端,我发送期望 json 作为响应的 ajax 请求,当发出请求时,大多数情况下一切都按预期工作,但有时没有明显的原因,post 参数会在 json 响应之前打印出来。
例如,我发出一个带有 post 参数的 post 请求(如 sample.com/request)[name:something,id:somethingelse],服务器大多数情况下会像这样响应
{"index":0,"part":false}
但有时像这样
名称 = 某物&id = 某物其他{“索引”:0,“部分”:false}
这是一个完全损坏的 json,因此请求无法发布刚刚完成的处理。
我仔细检查了两三遍,发现代码中没有打印 POST 变量的地方,我甚至尝试使用 php outputbuffer,它有助于解决问题,但问题仍然发生。
nginx 是否可能由于某些配置而添加此功能?
我刚刚在入口脚本中做了一个测试,我所做的是这样的
<?php
exit;
而且它所做的完全相同,一些响应应该是空的,因为没有打印任何内容,只是存在,而其他一些响应有响应名称=something&id=somethingelse,所以它肯定不是脚本。
nginx 配置
server {
include /www/nginx/conf/generic/base;
include /www/nginx/conf/domains_ssl/sample_com.conf;
server_name sample.com;
client_body_temp_path /www/tmp/sample_com_client_body_temp;
proxy_temp_path /www/tmp/sample_com_proxy_temp_path;
fastcgi_temp_path /www/tmp/sample_com_fastcgi_temp_path;
root /www/http/sample_com/public;
location ~ \.php$ {
include /www/nginx/conf/generic/php_config_dev;
fastcgi_pass _local;
}
include /www/nginx/conf/generic/location_base;
}
nginx 基础
access_log off;
listen 443 ssl http2;
ssl on;
client_max_body_size 1000M;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
ssl_ciphers EECDH+CHACHA20:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5;
ssl_dhparam /www/ssl/dhparam.pem;
index index.php index.html index.htm;
client_body_buffer_size 128k;
proxy_buffering off;
add_header Strict-Transport-Security "max- age=31536000; includeSubDomains" always;
ssl_stapling on;
ssl_stapling_verify on;
nginx 域_ssl/sample_com.conf
ssl_certificate /www/ssl/sample_com/fullchain.pem;
ssl_certificate_key /www/ssl/sample_com/privkey.pem;
nginx /www/nginx/conf/generic/php_config_dev
proxy_set_header X-Forwarded-Proto https;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_set_header X-Url-Scheme $scheme;
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
add_header X-Content-Type-Options nosniff;
add_header X-XSS-Protection "1; mode=block";
proxy_redirect off;
proxy_max_temp_file_size 0;
try_files $uri /index.php =404;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
fastcgi_read_timeout 9000;
autoindex off;