
다음 지침을 적용하여 FastCGI가 Ubuntu 16.04에서 Apache 2.4와 작동하도록 했습니다.이 askubuntu 스레드,이 HowtoForge 문서, 그리고이 디지털 오션 튜토리얼.
그 모든 소식통은 다음과 같이 말합니다.만들다 /etc/apache2/conf-available/php7.0-fpm.conf
그리고 거기에 무엇을 넣어야 할지 알려주세요. 하지만 을(를) 설치한 후에는 php-fpm
다음 내용이 포함된 해당 파일이 이미 있습니다.
# Redirect to local php-fpm if mod_php is not available
<IfModule !mod_php7.c>
# Enable http authorization headers
SetEnvIfNoCase ^Authorization$ "(.+)" HTTP_AUTHORIZATION=$1
<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>
그래서 대신 내 자신의 conf를 만들고 지침의 코드를 넣고 활성화했습니다.
존재하는 것은 무엇을 php7.0-fpm.conf
위한 것인가? 내 conf에 추가로 활성화하면 내 웹사이트가 작동을 멈춥니다. 의도한 대로 이 작업을 수행하지 않아 앞으로 문제가 발생할 수 있다는 점에 대해 걱정됩니다. 이에 대한 좋은 최신 문서를 찾는 것은 정말 어렵습니다.
참고로 전체 절차는 다음과 같습니다.
sudo apt install libapache2-mod-fastcgi php-fpm
sudo a2dismod php7.0 mpm_prefork
sudo a2enmod actions fastcgi alias mpm_worker
sudoedit /etc/apache2/conf-available/custom-fpm.conf
내용 /etc/apache2/conf-available/custom-fpm.conf
:
<IfModule mod_fastcgi.c>
AddHandler php7-fcgi .php
Action php7-fcgi /php7-fcgi virtual
Alias /php7-fcgi /usr/lib/cgi-bin/php7-fcgi
FastCgiExternalServer /usr/lib/cgi-bin/php7-fcgi -socket /var/run/php/php7.0-fpm.sock -pass-header
<Directory /usr/lib/cgi-bin>
Require all granted
</Directory>
</IfModule>
계속되는 명령:
sudo a2enconf custom-fpm
sudo systemctl restart apache2 && sudo systemctl restart php7.0-fpm
도움을 주셔서 미리 감사드립니다.
답변1
나도 같은 혼란에 빠졌고, 당신의 고통을 느낍니다. 많이 읽은 후에는 대부분의 기사가 시대에 뒤떨어진 것이며 이전 방법(또는 때로는 조합)을 언급하고 있다는 것이 분명해졌습니다.
Ubuntu 16.04의 내장 구성과 함께 PHP-FPM을 사용하면오직이렇게 해야 합니다:
sudo a2enconf php7.0-fpm
sudo a2enmod proxy proxy_fcgi
나는 당신이 한 대부분의 작업을 수행한 다음 해당 사용자 정의 구성이 의미가 없을 때 모두 제거했습니다.
기존 php7.0-fpm.conf는 무엇을 위한 것인가요?
패키지로 설치된 구성은 mod_proxy_fcgi를 사용하기 위한 것입니다. Unix 도메인 소켓을 통해 mod_proxy를 사용하여 mod_proxy_fcgi를 통해 .php 파일을 PHP FPM에 바인딩합니다. 내가 아는 한 이것은 가장 최신 "레시피"입니다(현재 사용 가능한 6가지 레시피 중!).
libapache2-mod-fastcgi
다른 오래된 방법을 설치할 필요가 없습니다 . 해당 구성을 작성할 필요는 없습니다. 이는 mod_fastcgi를 직접 사용하기 위한 것입니다. actions fastcgi alias
mod_fastcgi를 구성하기 위해 설치할 필요가 없습니다 .
Ubuntu 16에 관한 기사라 할지라도 새로운 레시피가 모두 설정되어 있다는 언급이 없는 기사가 없다는 것이 이상하다고 생각합니다!
이 의견은 나에게 역사를 명확하게 해주었습니다.
이제 선호되는 방법은 다음 방법 중 하나를 사용하는 fastcgi입니다.
(mod_fastcgi, httpd 2.2) http://wiki.apache.org/httpd/php-fastcgi
(mod_fcgid, httpd 2.2) http://wiki.apache.org/httpd/php-fcgid
(mod_proxy_fcgi, httpd 2.4) http://wiki.apache.org/httpd/PHP-FPM
http://php.net/manual/en/install.unix.debian.php#112544(2013)
또한 Apache의 이 기사에서는 ProxyPassMatch 또는 SetHandler + UDS를 사용하여 FPM에 연결하도록 mod_proxy_fcgi를 구성하는 세 가지 하위 옵션에 대해 자세히 설명합니다. UDS는 Apache 2.4.10 이후부터입니다.https://httpd.apache.org/docs/2.4/mod/mod_proxy_fcgi.html따라서 신뢰할 수 있는 백포트 이상이 필요합니다.
https://wiki.apache.org/httpd/PHP-FPM
그래서 저는 이를 구성하는 6가지 방법이 있다는 것을 시각화하게 되었습니다.
대략적인 역사적 순서는 다음과 같습니다.
Apache PHP 모듈: mod_php (기존 방식)
FastCGI를 통해 - Handler/Action/Alias/FastCgiExternalServer 구성 사용
ㅏ. mod_fastcgi
비. mod_fcgid
다음 중 하나를 통해 구성된 mod_proxy_fcgi를 통해 PHP-FPM을 사용합니다.
ㅏ. TCP 소켓(IP 및 포트) ProxyPassMatch ... fcgi://127.0.0.1:9000/path/
비. Unix 도메인 소켓(UDS) ProxyPassMatch … unix:/path/to/socket
씨. (UDS) SetHandler "proxy:unix: 또는 SetHandler "proxy:fcgi:를 통해
면책 조항: 이것은 나에게 모두 새로운 것이므로 아마도 여전히 5가지 틀린 점과 10가지 배워야 할 점이 있을 것입니다.