
Недавно я перешел с Apache 2.4 на NGINX 1.7.12 и мне нравится его скорость и универсальность. К сожалению, мне все еще не удалось заставить блок SERVER работать правильно.
Я использую FASTCGI php5-fpm для обслуживания php. Корень моего NGINX - /var/www. Основной веб-сайт MC находится по адресу www.example.com и обслуживается из /var/www/mc
В то же время у меня есть блог WordPress под названием «masmagazine» как подкаталог основного сайта www.example.com/masmagazine, который обслуживается из /var/www/masmagazine.
Мне удалось заставить оба сайта (основной сайт и блог) работать через два разных файла серверных блоков, но я не могу правильно объединить их, чтобы оба сайта работали одновременно:
Рабочий блок сервера для www.example.com:
server {
listen 80 default_server;
listen [::]:80 default_server;
server_name www.example.com;
root /var/www/mc;
index index.php index.html index.htm;
location / {
try_files $uri $uri/ /index.php;
}
location /includes {
rewrite ^/includes/css/coupon-unit.css /includes/css/coupon-unit.php;
rewrite ^/includes/css/mobile-menu.css /includes/css/mobile-menu.php;
rewrite ^/includes/css/mobile.css /includes/css/mobile.php;
rewrite ^/includes/css/style.css /includes/css/style.php;
rewrite ^/includes/css/users.css /includes/css/users.php;
}
location /feed {
rewrite ^/feed/ /feed.php break;
}
location /internationalsitemap {
rewrite ^/internationalsitemap.xml /internationalsitemap.php;
}
location /page {
rewrite ^/page-sitemap.xml /sitemap.php?site=page;
rewrite ^/page-child-sitemap.xml /sitemap.php?site=childstore;
}
location /newstores {
rewrite ^/newstores-sitemap.xml /sitemap.php?site=store;
}
location /coupon_category {
rewrite ^/coupon_category-sitemap.xml /sitemap.php?site=category;
}
location ~ \.php$ {
try_files $uri =404;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
Рабочий блок сервера для www.example.com/masmagazine":
server {
listen 80 default_server;
listen [::]:80 default_server;
server_name www.example.com;
index index.php index.html index.htm;
root /var/www;
location / {
try_files $uri $uri/ /index.php;
}
location /masmagazine {
alias /var/www/masmagazine;
try_files $uri $uri/ /masmagazine/index.php?$args;
}
location ~ \.php$ {
try_files $uri =404;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
Когда я объединяю эти два параметра, я получаю ошибку 404 «Не найдено» для masmagazine, вероятно, потому, что я неправильно обрабатываю ситуацию с подкаталогом (masmagazine) в блоке расположения PHP и т. д.
Буду очень благодарен за любую помощь! Я действительно застрял на этом.
В Apache сработало следующее:
<VirtualHost *:80>
ServerName http://www.example.com
DocumentRoot /var/www/mc
<Directory /var/www/mc/>
Options FollowSymLinks
AllowOverride All
DirectoryIndex index.php index.html
Require all granted
</Directory>
Alias /masmagazine /var/www/masmagazine
<Directory /var/www/masmagazine/>
Options FollowSymLinks
AllowOverride All
DirectoryIndex index.php index.html
Require all granted
</Directory>
</VirtualHost>
Обновлять:
По предложению Теро я использовал этот модифицированный серверный блок:
server {
listen 80 default_server;
listen [::]:80 default_server;
server_name www.example.com;
root /var/www/mc;
index index.php index.html index.htm;
location / {
try_files $uri $uri/ /index.php;
}
location /masmagazine {
alias /var/www/masmagazine;
try_files $uri $uri/ /index.php?$args;
}
location /includes {
rewrite ^/includes/css/coupon-unit.css /includes/css/coupon-unit.php;
rewrite ^/includes/css/mobile-menu.css /includes/css/mobile-menu.php;
rewrite ^/includes/css/mobile.css /includes/css/mobile.php;
rewrite ^/includes/css/style.css /includes/css/style.php;
rewrite ^/includes/css/users.css /includes/css/users.php;
}
location /feed {
rewrite ^/feed/ /feed.php break;
}
location /internationalsitemap {
rewrite ^/internationalsitemap.xml /internationalsitemap.php;
}
location /page {
rewrite ^/page-sitemap.xml /sitemap.php?site=page;
rewrite ^/page-child-sitemap.xml /sitemap.php?site=childstore;
}
location /newstores {
rewrite ^/newstores-sitemap.xml /sitemap.php?site=store;
}
location /coupon_category {
rewrite ^/coupon_category-sitemap.xml /sitemap.php?site=category;
}
location ~ \.php$ {
try_files $uri =404;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
Результатом является ошибка 404 при запросе www.example.com/masmagazine. Журнал показывает, что процессор PHP пытается обработать index.php masmagazine (согласно директиве index) из var/www/mc/masmagazine/index.php, когда он должен искать его в var/www/masmagazine/index.php.
Соответствующие части журнала:
2015/05/22 12:00:54 [debug] 2108#0: *1 http request line: "GET /masmagazine/ HTTP/1.1"
2015/05/22 12:00:54 [debug] 2108#0: *1 http uri: "/masmagazine/"
2015/05/22 12:00:54 [debug] 2108#0: *1 http args: ""
2015/05/22 12:00:54 [debug] 2108#0: *1 http exten: ""
2015/05/22 12:00:54 [debug] 2108#0: *1 test location: "/"
2015/05/22 12:00:54 [debug] 2108#0: *1 test location: "internationalsitemap"
2015/05/22 12:00:54 [debug] 2108#0: *1 test location: "newstores"
2015/05/22 12:00:54 [debug] 2108#0: *1 test location: "masmagazine"
2015/05/22 12:00:54 [debug] 2108#0: *1 test location: ~ "\.php$"
2015/05/22 12:00:54 [debug] 2108#0: *1 using configuration "/masmagazine"
2015/05/22 12:00:54 [debug] 2108#0: *1 http cl:-1 max:1048576
2015/05/22 12:00:54 [debug] 2108#0: *1 rewrite phase: 3
2015/05/22 12:00:54 [debug] 2108#0: *1 post rewrite phase: 4
2015/05/22 12:00:54 [debug] 2108#0: *1 generic phase: 5
2015/05/22 12:00:54 [debug] 2108#0: *1 generic phase: 6
2015/05/22 12:00:54 [debug] 2108#0: *1 generic phase: 7
2015/05/22 12:00:54 [debug] 2108#0: *1 access phase: 8
2015/05/22 12:00:54 [debug] 2108#0: *1 access phase: 9
2015/05/22 12:00:54 [debug] 2108#0: *1 access phase: 10
2015/05/22 12:00:54 [debug] 2108#0: *1 access phase: 11
2015/05/22 12:00:54 [debug] 2108#0: *1 post access phase: 12
2015/05/22 12:00:54 [debug] 2108#0: *1 try files phase: 13
2015/05/22 12:00:54 [debug] 2108#0: *1 http script var: "/masmagazine/"
2015/05/22 12:00:54 [debug] 2108#0: *1 trying to use file: "/" "/var/www/masmagazine/"
2015/05/22 12:00:54 [debug] 2108#0: *1 http script var: "/masmagazine/"
2015/05/22 12:00:54 [debug] 2108#0: *1 trying to use dir: "/" "/var/www/masmagazine/"
2015/05/22 12:00:54 [debug] 2108#0: *1 try file uri: "/masmagazine/"
2015/05/22 12:00:54 [debug] 2108#0: *1 content phase: 14
2015/05/22 12:00:54 [debug] 2108#0: *1 content phase: 15
2015/05/22 12:00:54 [debug] 2108#0: *1 open index "/var/www/masmagazine/index.php"
2015/05/22 12:00:54 [debug] 2108#0: *1 internal redirect: "/masmagazine/index.php?"
2015/05/22 12:00:54 [debug] 2108#0: *1 rewrite phase: 1
2015/05/22 12:00:54 [debug] 2108#0: *1 test location: "/"
2015/05/22 12:00:54 [debug] 2108#0: *1 test location: "internationalsitemap"
2015/05/22 12:00:54 [debug] 2108#0: *1 test location: "newstores"
2015/05/22 12:00:54 [debug] 2108#0: *1 test location: "masmagazine"
2015/05/22 12:00:54 [debug] 2108#0: *1 test location: ~ "\.php$"
2015/05/22 12:00:54 [debug] 2108#0: *1 using configuration "\.php$"
2015/05/22 12:00:54 [debug] 2108#0: *1 http cl:-1 max:1048576
2015/05/22 12:00:54 [debug] 2108#0: *1 rewrite phase: 3
2015/05/22 12:00:54 [debug] 2108#0: *1 post rewrite phase: 4
2015/05/22 12:00:54 [debug] 2108#0: *1 generic phase: 5
2015/05/22 12:00:54 [debug] 2108#0: *1 generic phase: 6
2015/05/22 12:00:54 [debug] 2108#0: *1 generic phase: 7
2015/05/22 12:00:54 [debug] 2108#0: *1 access phase: 8
2015/05/22 12:00:54 [debug] 2108#0: *1 access phase: 9
2015/05/22 12:00:54 [debug] 2108#0: *1 access phase: 10
2015/05/22 12:00:54 [debug] 2108#0: *1 access phase: 11
2015/05/22 12:00:54 [debug] 2108#0: *1 post access phase: 12
2015/05/22 12:00:54 [debug] 2108#0: *1 try files phase: 13
2015/05/22 12:00:54 [debug] 2108#0: *1 http script var: "/masmagazine/index.php"
2015/05/22 12:00:54 [debug] 2108#0: *1 trying to use file: "/masmagazine/index.php" "/var/www/mc/masmagazine/index.php"
2015/05/22 12:00:54 [debug] 2108#0: *1 trying to use file: "=404" "/var/www/mc=404"2015/05/22 12:00:54 [debug] 2108#0: *1 http finalize request: 404, "/masmagazine/index.php?" a:1, c:2
2015/05/22 12:00:54 [debug] 2108#0: *1 http special response: 404, "/masmagazine/index.php?"
2015/05/22 12:00:54 [debug] 2108#0: *1 http set discard body
2015/05/22 12:00:54 [debug] 2108#0: *1 xslt filter header
2015/05/22 12:00:54 [debug] 2108#0: *1 HTTP/1.1 404 Not Found
решение1
Добавьте этот блок к вашему первому server
блоку:
location /masmagazine {
alias /var/www/masmagazine;
try_files $uri $uri/ /index.php?$args;
}
Внутреннее try_files
расположение блоков работает относительно location
корневого каталога блока, который здесь определяется с помощью оператора alias
.