У меня есть сайт, на котором я хочу создавать и удалять папки с промежуточными сайтами WordPress.
структура примерно такая:
/wp1
/wp2
/wp3
/...
Я использую nginx и понимаю, что для того, чтобы это заработало, мне придется создать несколько блоков местоположения для захвата каждого сайта WordPress:
location /wp1 {
try_files $uri $uri/ /wp1/index.php?$args;
}
location /wp2 {
try_files $uri $uri/ /wp2/index.php?$args;
}
location /wp3 {
try_files $uri $uri/ /wp3/index.php?$args;
}
...
Такая конфигурация работает отлично, но ее сложно поддерживать, поэтому я попробовал использовать регулярное выражение с местоположением, чтобы использовать только один блок местоположения для всех сайтов, чтобы я мог просто удалять и создавать папки, не беспокоясь о настройке nginx:
location ~ ^/wp(?<staging>\d+) {
try_files $uri $uri/ /wp$staging/index.php?$args;
}
Но это не работает. Есть идеи, что я упускаю?
Вот мой полный файл конфигурации:
server {
listen 80 default_server;
listen [::]:80 default_server;
server_name _;
root /home/city/sites/staging1/html;
index index.php;
location = /favicon.ico {
log_not_found off;
access_log off;
}
location = /robots.txt {
allow all;
log_not_found off;
access_log off;
}
location / {
try_files $uri $uri/ /index.php?$args;
}
location ~ ^/stg(?<staging>\d+) {
try_files $uri $uri/ /stg$staging/index.php?$args;
}
location ~ \.php$ {
include fastcgi.conf;
fastcgi_intercept_errors on;
fastcgi_pass unix:/run/php/php7.0-fpm.city.sock;
}
location ~* \.(js|css|png|jpg|jpeg|gif|ico)$ {
expires max;
log_not_found off;
}
}
Это результатcurl -I http://ipaddress/wp2
HTTP/1.1 301 Moved Permanently
Server: nginx
Date: Tue, 17 Jan 2017 03:45:43 GMT
Content-Type: text/html
Content-Length: 178
Location: http://ipaddress/wp2/
Connection: keep-alive
Это результатcurl -I http://ipaddress/wp2/
HTTP/1.1 200 OK
Server: nginx
Date: Tue, 17 Jan 2017 03:45:49 GMT
Content-Type: application/octet-stream
Content-Length: 418
Last-Modified: Wed, 25 Sep 2013 00:18:11 GMT
Connection: keep-alive
ETag: "52422bc3-1a2"
Accept-Ranges: bytes
Но это загружает файл wordpress index.php, тип контента application/octet-stream
которого не тот, что я должен получить.
Это ожидаемый вывод curl без блока местоположения регулярного выражения, простой сайт WordPress:
HTTP/1.1 200 OK
Server: nginx
Date: Tue, 17 Jan 2017 04:30:30 GMT
Content-Type: text/html; charset=UTF-8
Connection: keep-alive
Link: <http://ipaddress/wp2/wp-json/>; rel="https://api.w.org/"
Link: <http://ipaddress/wp2/>; rel=shortlink
В файлах журнала nginx я вижу, что используется местоположение регулярного выражения, но я не понимаю, в чем проблема и почему я получаю такой ответ:
[debug] 24359#24359: *1330 test location: "/"
[debug] 24359#24359: *1330 test location: "favicon.ico"
[debug] 24359#24359: *1330 test location: "robots.txt"
[debug] 24359#24359: *1330 test location: ~ "^/wp(?<staging>\d+)"
[debug] 24359#24359: *1330 http regex set $staging to "2"
[debug] 24359#24359: *1330 using configuration "^/wp(?<staging>\d+)"
[debug] 24359#24359: *1330 http cl:-1 max:1048576
[debug] 24359#24359: *1330 rewrite phase: 3
[debug] 24359#24359: *1330 post rewrite phase: 4
[debug] 24359#24359: *1330 generic phase: 5
[debug] 24359#24359: *1330 generic phase: 6
[debug] 24359#24359: *1330 generic phase: 7
[debug] 24359#24359: *1330 access phase: 8
[debug] 24359#24359: *1330 access phase: 9
[debug] 24359#24359: *1330 access phase: 10
[debug] 24359#24359: *1330 post access phase: 11
[debug] 24359#24359: *1330 try files phase: 12
[debug] 24359#24359: *1330 http script var: "/wp2"
[debug] 24359#24359: *1330 trying to use file: "/wp2" "/home/city/sites/staging1/html/wp2"
[debug] 24359#24359: *1330 http script var: "/wp2"
[debug] 24359#24359: *1330 trying to use dir: "/wp2" "/home/city/sites/staging1/html/wp2"
[debug] 24359#24359: *1330 try file uri: "/wp2"
[debug] 24359#24359: *1330 content phase: 13
[debug] 24359#24359: *1330 content phase: 14
[debug] 24359#24359: *1330 content phase: 15
[debug] 24359#24359: *1330 content phase: 16
[debug] 24359#24359: *1330 content phase: 17
[debug] 24359#24359: *1330 http filename: "/home/city/sites/staging1/html/wp2"
решение1
Проблема, по-видимому, в том, что ваш PHP не выполняется, а просто загружается.
Согласно вашему комментарию, вы должны описать решение, либо в своем собственном ответе, либо в комментарии к этому ответу, либо отредактировав свой вопрос. Я думаю, что для пользователей с более низкими показателями репутации все немного ограничено.
решение2
Проблема заключалась в том, что местоположение регулярного выражения не использовало:
location ~ \.php$ {
include fastcgi.conf;
fastcgi_intercept_errors on;
fastcgi_pass unix:/run/php/php7.0-fpm.city.sock;
}
Итак, дело было в том, что файл php не выполнялся.
Чтобы решить эту проблему, просто добавьте location ~ \.php$
в проблемное место регулярного выражения:
location ~ ^/stg_(?<staging>\w+) {
try_files $uri $uri/ /stg_$staging/index.php?$args;
location ~ \.php$ {
include fastcgi.conf;
fastcgi_intercept_errors on;
fastcgi_pass unix:/run/php/php7.0-fpm.city.sock;
}
}