Ubuntu 16.04服务器(AWS)上的PHP7.0 + Apache2上的FastCGI / FPM

时间:2018-03-25 10:50:07

标签: php apache ubuntu fastcgi fpm

所以Google上已经提供的所有答案,在SO上,甚至在DigitalOcean上,只讨论PHP5.6或更低版本或者Apache2 v2.3或更低版本或者只考虑V14.04或更低版本的Ubuntu,它们都是过时的解决方案在最新的PHP7.0 + Apache2 v.2.4.18上无法使用/给出错误的Ubuntu 16.04服务器设置,其中包含用于DB +对象缓存,后端速度增强和反向代理的redis,memcache和varnish设置的wordpress分别。只是清楚地了解我的设置,这样您就不必继续弄清楚模糊的想法或答案,并为拥有最新/几乎相同设置的人们提供正确的解决方案! :)

因为我使用超级慢的微型AWS实例 - 极简主义页面上的服务器响应时间为1.5s到5.4s!我发现fastcgi在这里是一个真正的黄金,可以加速服务器高达20倍到50倍!但是我无法获得正确的安装解决方案,因为它们已经过时了,而v7.0之后的PHP已经改变了我们需要存储数据和配置的文件夹和文件的所有内容。 所以,我遵循了这个Stack Overflow问题https://askubuntu.com/questions/378734/how-to-configure-apache-to-run-php-as-fastcgi-on-ubuntu-12-04-via-terminal并遵循Evan Mattson和Nazq提供的解决方案(第三个也是最后一个答案),用php7.0替换所有内容并移除php5.6但是Evan在他的回答中提到:

  

现在在文档root / var / www / html中创建以下PHP文件:

     

sudo nano /var/www/html/info.php

     

添加:

     

<?php phpinfo(); ?>

     

save&amp;退出。

     

现在我们在浏览器中调用该文件(例如   http://your-server-ip/info.php

     

在顶部的Server API下,您应该看到FPM / FastCGI。

     

成功!

我没有看到它!我在info.php文件的Server API块中得到了通常的默认 Apache 2.0 Handler ,这意味着这里有问题。 建议要求:

  

使用

修改/etc/apache2/conf-available/php5-fpm.conf
<IfModule mod_fastcgi.c>
    AddHandler php5-fcgi .php
    Action php5-fcgi /php5-fcgi
    Alias /php5-fcgi /usr/lib/cgi-bin/php5-fcgi
    FastCgiExternalServer /usr/lib/cgi-bin/php5-fcgi -socket /var/run/php5-fpm.sock -pass-header Authorization -idle-timeout 3600
    <Directory /usr/lib/cgi-bin>
        Require all granted
    </Directory>
</IfModule>
     

然后执行:       #sudo a2enconf php5-fpm       #sudo apache2 restart


替换它们用于PHP7.0以下是我对这些步骤的说明:

  


我编辑了/etc/apache2/conf-enabled/php7.0-fpm.conf和   /etc/apache2/conf-available/php7.0-fpm.conf同时:

<IfModule mod_fastcgi.c>
    AddHandler php7.0-fcgi .php
    Action php7.0-fcgi /php7.0-fcgi
    Alias /php7.0-fcgi /usr/lib/cgi-bin/php7.0-fcgi
    FastCgiExternalServer /usr/lib/cgi-bin/php7.0-fcgi -socket /var/run/php7.0-fpm.sock -pass-header Authorization -idle-timeout 3600
    <Directory /usr/lib/cgi-bin>
        Require all granted
    </Directory>
</IfModule>
     


现在,这两个文件看起来完全相同(相同):

# Redirect to local php-fpm if mod_php is not available
<IfModule !mod_php7.c>
<IfModule proxy_fcgi_module>
    # Enable http authorization headers
    <IfModule setenvif_module>
    SetEnvIfNoCase ^Authorization$ "(.+)" HTTP_AUTHORIZATION=$1
    </IfModule>

    <FilesMatch ".+\.ph(p[3457]?|t|tml)$">
        SetHandler "proxy:unix:/run/php/php7.0-fpm.sock|fcgi://localhost"
    </FilesMatch>
    <FilesMatch ".+\.phps$">
        # Deny access to raw php sources by default
        # To re-enable it's recommended to enable access to the files
        # only in specific virtual host or directory
        Require all denied
    </FilesMatch>
    # Deny access to files without filename (e.g. '.php')
    <FilesMatch "^\.ph(p[3457]?|t|tml|ps)$">
        Require all denied
    </FilesMatch>
</IfModule>
</IfModule>

<IfModule mod_fastcgi.c>
    AddHandler php7.0-fcgi .php
    Action php7.0-fcgi /php7.0-fcgi
    Alias /php7.0-fcgi /usr/lib/cgi-bin/php7.0-fcgi
    FastCgiExternalServer /usr/lib/cgi-bin/php7.0-fcgi -socket /var/run/php7.0-fpm.sock -pass-header Authorization -idle-timeout 3600
    <Directory /usr/lib/cgi-bin>
        Require all granted
    </Directory>
</IfModule>
     

然后我执行#sudo a2enconf php7.0-fpm( - &gt;替换)

#sudo service apache2 restart
#sudo systemctl restart apache2


我在浏览器中调用该文件(例如http://your-server-ip/info.php

  

在顶部的Server API下,您应该看到FPM / FastCGI。   但我仍然看到:Apache 2.0 Handler文件的Server API块中的常见默认info.php,这意味着此处出现问题。

请帮忙!我坚持这么久了! PS:请提供您发现正确/正常的解决方案,因为这是我的生产网站,实验可能会导致某些事情破裂,欢迎提出建议,但请不要选择不可逆转的 / < STRONG>灾害!谢谢!

0 个答案:

没有答案