我正在尝试以 nginx->apache2.4->php-fpm(通过 mod_proxy_fcgid)的方式让服务器工作(nginx 用于提供静态文件)(我不确定现在是否需要 apache)。它有效,但我有几个问题。
当我使用 apache2.2 并以 php 作为 apache 模块时(在旧服务器上),我可以为每个虚拟主机设置 php_admin_value 。现在,当我使用 php-fpm 时,apache 无法理解这些值,因此无法启动。如何在使用 php-fpm 时为每个虚拟主机设置这些值?php_admin_value sendmail_path "/usr/sbin/sendmail -t -i -f [email protected]"
第二个问题是,如何使 _SERVER["REMOTE_ADDR"] 填充真实的远程地址?使用 nginx+apache+php 作为 apache 模块,可以使用 mod rpaf 解决,但截至目前,_SERVER["REMOTE_ADDR"] 显示 127.0.0.1。
最后一个问题。如果我决定只使用 nginx+php-fpm,那么放弃 apache 会失去哪些“基本”功能?
更新 1。
显然 mod_rpaf 没有做它应该做的事情。Apache 实际上为 2.4 版提供了具有类似功能的官方 mod。如果有人也需要它,下面是获取它的方法:
1. wgethttps://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. 配置 mod
<IfModule remoteip_module>
RemoteIPHeader X-Real-IP
RemoteIPInternalProxy 127.0.0.1
</IfModule>
注意:步骤 4 取决于您的 nginx 设置。我认为它也可以与 X-Forwarded-To 配合使用。这样,问题 #2 就解决了。
更新2。
例如,这些选项可以在池的配置文件中设置php_admin_value[open_basedir]
。这需要为每个虚拟主机设置单独的池,在我看来这不是很好,但由于我只有 4 个虚拟主机,所以不会太混乱。
因此,问题 #1 解决了。
答案1
可以使用以下方式设置:
fastcgi_param PHP_VALUE 'sendmail_path "/usr/sbin/sendmail -t -i -f [email protected]"';
如果要传递多个值,则它们必须都在同一个 中PHP_VALUE
,并用 分隔\n
。
fastcgi_param PHP_VALUE 'allow_url_fopen 0\nmemory_limit 64M'
答案2
通过向 nginx 添加以下内容,将远程 IP 添加到 apache 的 HTTP 标头(X-Forwarded-For):
proxy_set_header X-Forwarded-For $remote_addr;
使用mod_extract_forwardedapache 模块来提取这些 IP