Я пытаюсь перенести некоторые веб-сайты со старого сервера под управлением Apache и mod_php на новый сервер с Nginx и PHP 7 с использованием PHP-FPM. Оба сайта содержат корзину покупок PHP в корне домена и блог WordPress, работающий в подпапке / news. В настоящее время на старых серверах блог Word Press находится в папке под названием news в корневом веб-каталоге (таким образом, смешанной с файлами тележек для покупок) на новом сервере. Я бы хотел разделить их, чтобы каждое приложение находилось в своем собственная отдельная папка, такая что:
Файлы в / home / www / sitename / cart / htdocs доступны по адресу https: //www.site.tld/
и
Файлы в / home / www / sitename / wordpress / htdocs доступны по адресу https: //www.site.tld/news/
Я также хотел бы иметь возможность использовать разные пулы PHP-FPM для обеспечения безопасности и, при необходимости, позволить мне запускать любое из приложений с пулом PHP 5, пока оно не будет обновлено для работы на PHP 7.
Я уже близко, но он продолжает пытаться загрузить /news/test.php из /home/www/sitename/wordpress/htdocs//news/test.php вместо / home / www / manicpanic / wordpress / htdocs / test. php.
Конфиг:
server {
listen iphere:443 ssl http2;
#ssl conf
root /home/www/sitename/cart/htdocs;
server_name site.tld www.site.tld;
rewrite ^(.*)\.v[\d]+\.(css|js|png)$ $1.$2;
location ~* \.(?:ico|css|js|gif|jpe?g|png)$ {
expires 30d;
add_header Pragma public;
add_header Cache-Control "public";
}
location / {
index index.php index.html index.htm;
try_files $uri $uri/ /index.html;
}
location /news {
alias /home/www/sitename/wordpress/htdocs;
location ~ \.php$ {
fastcgi_pass unix:/run/php/php7.0-fpm-wordpress.sock;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_param APPLICATION_ENV production;
include fastcgi_params;
fastcgi_index index.php;
fastcgi_param PHP_VALUE default_charset=ISO-8859-1;
}
}
location ~ [^/]\.php(/|$) {
fastcgi_pass unix:/run/php/php7.0-fpm-cart.sock;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param APPLICATION_ENV production;
include fastcgi_params;
fastcgi_index index.php;
fastcgi_param PHP_VALUE default_charset=ISO-8859-1;
}
}
Регулярное выражение location ~ [^/]\.php(/|$)
будет иметь приоритет перед префиксом location /news
, если только вы используете ^~
модификатор. Видеть этот документ для большего.
location ^~ /news {
alias /home/www/sitename/wordpress/htdocs;
location ~ \.php$ {
...
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $request_filename;
...
}
}
Кроме того, вы не можете использовать $document_root$fastcgi_script_name
в сочетании с alias
поскольку он создает неправильный путь. Использовать $request_filename
вместо.
Всегда include fastcgi_params;
перед используя конкретные fastcgi_param
директивы, иначе определенные настройки могут быть автоматически перезаписаны.
Есть очень хороший учебник (хотя вы, вероятно, можете пропустить настройку разных портов): https://pehapkari.cz/blog/2017/03/27/multiple-php-versions-the-easy-way/
server {
listen 8870 default_server;
listen [::]:8870 default_server;
server_name _;
root /var/www/site-with-php7.0;
index index.php;
location / {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php7.0-fpm.sock; # adjust for the listen setting discussed above
}
}
server {
listen 8856 default_server;
listen [::]:8856 default_server;
server_name _;
root /var/www/site-with-php5.6;
index index.php;
location / {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php5.6-fpm.sock; # adjust for the listen setting discussed above
}
}