我想从客户端RESTful应用程序(JS)传递一些自定义标题(ACCESS_TOKEN)到应用程序服务器(php-fpm)。 我读过nginx应该通过所有的http头到PHP,但不知何故,它不来我的PHP 🙁 我可以看到它在萤火虫http://o7.no/N6DM7q,但不能在$ _SERVERvariables中看到它。 它只是不存在于$ _SERVER数组中。 我想我需要手动通过它。 现在我的configuration如下所示: location @php-fpm { include /etc/nginx/fastcgi_params; fastcgi_pass unix:/tmp/php5-fpm.sock; fastcgi_param REQUEST_URI /index.php$request_uri; fastcgi_param SCRIPT_FILENAME /htdocs/index.php; fastcgi_param PATH_INFO $fastcgi_script_name; fastcgi_param DOCUMENT_ROOT /htdocs; } } 当我在位置定义中添加新行时: location @php-fpm { include /etc/nginx/fastcgi_params; … fastcgi_param ACCESS_TOKEN $http_access_token; } } 或者即使我将它添加到fastcgi_params文件它不会帮助:( 如果我把位置部分放在下一行: fastcgi_param ACCESS_TOKEN $http_access_token; 然后在PHP中它有空值:( 我怎么可以通过nginx将自定义标头从客户端传递到后端(PHP)?
我试图用nginx创build一个localhost服务器。 我在我的页面上收到了一个403 Forbidden 。 这是我的nginx错误日志: 2013/03/30 20:39:18 [error] 12161#0: *1 directory index of "/home/mike/Projects/606club/" is forbidden, client: 127.0.0.1, server: localhost, request: "GET /606club/ HTTP/1.1", host: "localhost" 我的nginx.conf文件: server { listen 80; server_name localhost; #for .html sites location / { root /home/mike/Projects; index index.html index.htm; } #for .php sites location ~ \.php$ { root /home/mike/Projects; fastcgi_pass […]
我有一个位置块设置来捕获所有文件请求,并将它们发送到PHP-FPM : location / { try_files $uri /routing.php?$args; fastcgi_pass unix:/opt/local/var/run/php54/php-fpm-www.sock; include /documents/projects/intahwebz/intahwebz/conf/fastcgi.conf; } 这可以正常工作,并正确地将请求传递给PHP-FPM ,或者将请求的确切的现有php文件或设置为要运行的脚本的routing.php 。 我试图添加一个错误页面,以便如果路由文件被删除或不可用,将显示错误页面,而不是Nginx的默认错误页面: location / { try_files $uri /routing.php?$args /50x_static.html; fastcgi_pass unix:/opt/local/var/run/php54/php-fpm-www.sock; include /documents/projects/intahwebz/intahwebz/conf/fastcgi.conf; } 这将停止正在提供的routing.php文件,而是显示50x_static.html页面。 请求现有的PHP文件仍然工作,即去URL /dynamic.php 我意识到try_files命令中的最后一个参数有点神奇: 在没有find文件的情况下,调用到最后一个参数的内部redirect。 请注意,只有最后一个参数会导致内部redirect,前者只是设置内部URI指针。 最后一个参数是回退URI并且必须存在,否则会引发内部错误。 在调查为什么error_page破坏了configuration的时候,我意识到对于工作的configuration(没有静态错误页面),当试图获取根URL“/”时,根据Nginx重写日志,Nginx确实似乎匹配请求两次。 “: "^/proxy/(\d+)/(\w+)/(.+)\.(gif|png|jpg|jpeg|GIF|PNG|JPG|JPEG)$" does not match "/", client: 127.0.0.1, server: basereality.com, request: "GET / HTTP/1.1", host: "basereality.test" "^/proxy/(\d+)/(.+)\.(gif|png|jpg|jpeg|GIF|PNG|JPG|JPEG)$" does […]
我在1GB的单核VPS上运行Nginx 1.5.1和PHP-FPM(PHP 5.3.26)的Drupal 6,SSD存储上有3GB的交换空间。 我刚刚从共享主机切换到这个非托pipe的VPS,因为我的网站变得太重了,所以我仍然在学习绳索。 我有很高的stream量,我没有真正注意到,但谷歌Adsense通常每天接近30K页面浏览量。 我通常有50到80个经过身份validation的用户login,另外还有几百个匿名用户在任何特定时间点击Boost静态HTMLcaching。 我遇到的问题是PHP-FPM经常停止响应,导致Nginx 502或504错误。 我发誓,我已经阅读了互联网上关于这个问题的每一页,这似乎相当普遍,我已经尝试了无数的configuration组合,我找不到一个好的解决scheme。 重新启动Nginx和PHP-FPM后,网站运行得非常快,然后没有任何警告就停止响应。 当浏览器在服务器上等待时,我得到一个白色的屏幕,大约30秒到一分钟后,它会抛出一个Nginx的502或504错误。 有时运行2分钟,有时5分钟,有时5小时,但总是挂起来。 当我发现服务器处于这种状态时,仍然有足够的空闲内存(> 500MB或更多)并且没有主要的CPU使用,控制和工人PHP-FPM进程仍然存在,并且服务器仍然可以通过SSH进行ping命令和使用。 通过初始化脚本重新载入PHP-FPM会再次激活它。 hangups似乎不符合stream量,因为我在一个没有stream量的开发VPS上testing这个configuration时一直观察到这种行为。 我一直在不断调整设置,但我不能确定地消除这个问题。 我将Nginx的工作者设置为1.在PHP-FPMconfiguration中,我尝试了所有三个进程pipe理器。 “dynamic”绝对是最不可靠的,只有几分钟后才会持续挂断。 “静态”也是不可靠和不可预测的。 最less的马车已经“非常需要”了,但是即使这样也会让我失望,有时甚至会在12到24小时之后。 但是我不能离开服务器,因为PHP-FPM死了,永远不会自动返回。 我试着将pm.max_children的值从3调整到50,并没有太大的差别,但是我现在是10。 我也设置pm.max_requests从30到无限的任何地方,似乎没有什么区别。 我也一直在使用APC和Rediscaching来从数据库中取出一些负载,但是在使用和不使用这些机制的情况下都存在PHP-FPM问题。 根据日志,PHP-FPM进程不是用SIGSEGV或SIGBUS退出,而是用SIGTERM。 我得到了很多行: WARNING: [pool www] child 3739, script '/var/www/drupal6/index.php' (request: "GET /index.php") execution timed out (38.739494 sec), terminating 和: WARNING: [pool www] child 3738 exited on signal 15 (SIGTERM) […]
根据我在各种文档和示例configuration中看到的,您可以将PHP-FPM设置在不同的服务器/硬件上,与您的networking服务器(在我的情况下为nginx)分开。 虽然大多数例子都列出了一些变化: location ~ \.php { [various parameters] fastcgi_pass 127.0.0.1:9000; } 你可以将fastcgi_passredirect到任何IP地址(192.168.1.10是安全的,或者200.55.35.40,发疯!),从而将PHP处理委托给不同的服务器。 我的问题是:那些单独的服务器必须在其文件系统中可访问PHP文件,对吧? 如果是的话,如何configurationPHP的根目录来查找文件,因为它通常是在nginx的configuration(在我的情况下)。 是通过chroot和chdir参数在池configuration或任何我发送SCRIPT_FILENAME从nginx? 现在最有趣的部分(对我来说):如果在该服务器上的文件是不必要的(并且nginx提供文件到fastcgi_pass中的ip:port),包括工作? 我只是想设置一堆PHP-FPM服务器,让他们承担Wordpress多站点节点的处理负载,而不需要来回交换大量的东西。
我试图让服务器的工作方式nginx-> apache2.4-> php-fpm(通过mod_proxy_fcgid)(为服务静态文件的nginx)(我不知道现在甚至需要Apache)。 它的工作,但我没有几个问题。 当我用apache2.2作为apache模块(在旧服务器上)时,我可以为每个虚拟主机设置php_admin_value,例如php_admin_value sendmail_path "/usr/sbin/sendmail -t -i -f [email protected]" 。 现在,当我使用php-fpm时,apache不理解这些,并且不会启动。 如何在使用php-fpm时为每个虚拟主机设置这些值? 第二个问题是,我如何使_SERVER [“REMOTE_ADDR”]填充真正的远程地址? 用nginx + apache + php作为apache模块,用mod rpaf解决,但是现在_SERVER [“REMOTE_ADDR”]显示127.0.0.1。 最后一个问题。 如果我决定只去nginx + php-fpm什么“基本”的function,我会丢弃阿帕奇丢失? 更新1。 显然mod_rpaf没有做它应该做的事情。 Apache实际上为2.4提供了类似function的官方mod。 如果有人也需要它,这里是你如何得到它: 1. wget https://svn.apache.org/repos/asf/httpd/httpd/trunk/modules/metadata/mod_remoteip.c 2. apxs -cia mod_remoteip.c 3.启用mod LoadModule remoteip_module usr / lib / apache2 / modules / mod_remoteip.so 4.configurationmod <IfModule remoteip_module> RemoteIPHeader X-Real-IP […]
我使用mod_proxy_fcgi的Apache 2.4.7的目的是通过PHP传递到PHP-FPM(这将用于共享主机环境)。 htaccess对非php文件工作正常,但是一旦它碰到通过php请求代理的重写规则,htaccess将被忽略。 我知道为什么会发生。 问题是:我如何解决它? 这个问题如何强制apache处理请求到php文件作为本地文件的请求,然后通过代理? 我花了大量时间研究这个问题,并给出了“答案”作为解决scheme: 1)“使用Apacheconfiguration,而不是.htaccess”这是有效的解决scheme,但不是共享主机环境(我不打算给共享托pipe客户访问Apacheconfiguration))。 2)“不要使用.htaccess,因为它有性能/安全/其他问题”,那么共享托pipe客户将如何控制其网站上的访问/url重写? 除此之外,如果.htaccess不是一个要求,我会简单地使用nginx。 3)“把代理里面的重写规则” – 这是不正确的,它不起作用。 这种行为似乎不是一个错误,而是一个“function”,根据https://issues.apache.org/bugzilla/show_bug.cgi?id=54887
当我访问index.php时,它工作正常。 但是在localhost / pset7上,它给了403。 这里是权限日志, -rw-r–r–. 1 root root 51 Jul 31 14:21 index.html -rw-r–r–. 1 root root 51 Jul 31 14:15 index.php drwxrwxr-x. 5 my_user my_user 4096 Jul 31 15:13 pset7 我需要在networking服务器上运行它,所以请告诉我如何设置正确的权限并解决此问题。 在CentOS上使用LEMP。 如果你需要任何其他信息/日志,只要问。 Edit1,nginx config- http://pastebin.com/K3fcWgec 谢谢。
我最近在我的服务器(CENTOS 6.5 x86_64标准,WHM 11.44.1(内部版本7))上安装了php-fpm,遵循这里的说明: http : //infoliser.com/how-to-configure-apache-2-2-withwith使用–php-FPM-WHM-的cPanel和- easyapache / phpinfo()显示的服务器API现在是FPM / FastCGI。 但是,当我运行一个包含exec('id')的php脚本时,我得到: uid=99(nobody) gid=99(nobody) groups=99(nobody) 我得到的印象是,php-fpm将作为php脚本所有者的uid来运行,而不是作为http进程的所有者(在这种情况下)。 这个页面http://php-fpm.org/说fpm有“能够启动与不同的uid / gid / chroot /环境和不同的php.ini(replacesafe_mode)的工人”。 我究竟做错了什么?
我目前正在使用Vagrantbuild立一个本地开发的机器。 一切运行,因为它应该期望查询参数不传递给PHP页面上。 这意味着在www.example.com/?a=b上查询参数是可访问的,但在www.example.com/subpage/?a=b则不是。 我发现使用谷歌这个问题的一般答复是修改try_files指令,但这不适合我。 我也检查了php.ini的request_order & variables_order – 所有的东西都在那里正确设置。 这是我的configuration: server { listen 80; server_name example.com www.example.com; root /var/www/public; location / { index index.html index.htm index.php; try_files $uri $uri/ /index.php?$query_string; include /etc/nginx/fastcgi_params; } location ~ \.php$ { fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $request_filename; include /etc/nginx/fastcgi_params; } sendfile off; } 由于我对服务器设置和pipe理了解不多,所以我在这里打了一堵砖墙,还是在这里我还检查了一些东西: $query_string在/etc/nginx/fastcgi_params为fastcgi_param QUERY_STRING $query_string; 这对我来说似乎是正确的。 […]