nginx не может загрузить подпапку WordPress, используя другое корневое местоположение

У нас есть установка WordPress в подпапке корневого домена, которая находится по другому пути, даже если в расположении используется root, установка WordPress по-прежнему загружает корневой каталог сайта доменов.

server {
  listen              80;
  server_name         domain.com;
  return              301 https://$server_name$request_uri;
}

server {
  listen              443 ssl;
  server_name         domain.com;

  ssl                 on;
  #ssl_certificate     /var/www/certs/star.domain.com.cert;
  #ssl_certificate_key /var/www/certs/star.domain.com.key;
  ssl_certificate      /var/www/certs/cert_chain.crt;
  ssl_certificate_key  /var/www/certs/__domain_com.key;
  ssl_protocols       SSLv3 TLSv1 TLSv1.1 TLSv1.2;
  ssl_ciphers         ALL:!aNULL:!ADH:!eNULL:!LOW:!EXP:RC4+RSA:+HIGH:+MEDIUM;

  return              301 https://www.$server_name$request_uri;
}

server {
  ## Default Server Settings
  include             /etc/nginx/basic.conf;

  listen              443 ssl;
  server_name         www.domain.com;

  access_log          /var/log/nginx/domain.access.log;
  error_log           /var/log/nginx/domain.error.log;

  root                /var/www/domain/current;
  index               index.php index.html;

  ssl                 on;
  #ssl_certificate     /var/www/certs/star.domain.com.cert;
  #ssl_certificate_key /var/www/certs/star.domain.com.key;
  ssl_certificate      /var/www/certs/cert_chain.crt;
  ssl_certificate_key  /var/www/certs/__domain_com.key;
  ssl_protocols       SSLv3 TLSv1 TLSv1.1 TLSv1.2;
  ssl_ciphers         ALL:!aNULL:!ADH:!eNULL:!LOW:!EXP:RC4+RSA:+HIGH:+MEDIUM;

  error_page          404 /index.php;

  location / {
    try_files $uri $uri/ $uri.php?$query_string;
  }

location /blog {
    root /var/www/;
    try_files $uri $uri/ /blog/index.php?q=$request_uri;
}

location ~ /blog/.+\.php$ {
  try_files $uri $uri/ /blog/index.php?q=$request_uri =404;
  include       /etc/nginx/fastcgi_params.conf;
  fastcgi_pass  127.0.0.1:9000;
  fastcgi_index index.php;
}

}

Это должно работать в соответствии с https://www.nginx.com/resources/wiki/start/topics/tutorials/config_pitfalls/

Вот запрос curl к корню домена:

[root@callloop-web-1 www]# curl -IL callloop.com
HTTP/1.1 301 Moved Permanently
Server: nginx/1.6.3
Date: Fri, 21 Apr 2017 19:31:27 GMT
Content-Type: text/html
Content-Length: 184
Connection: keep-alive
Location: https://callloop.com/

HTTP/1.1 301 Moved Permanently
Server: nginx/1.6.3
Date: Fri, 21 Apr 2017 19:31:27 GMT
Content-Type: text/html
Content-Length: 184
Connection: keep-alive
Location: https://www.callloop.com/

HTTP/1.1 200 OK
Server: nginx/1.6.3
Date: Fri, 21 Apr 2017 19:31:28 GMT
Content-Type: text/html; charset=UTF-8
Connection: keep-alive
Vary: Accept-Encoding
Set-Cookie: PHPSESSID=3obiecqr3rm4i1q1bas8rcripdfuv8ru; path=/; HttpOnly
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache

И журналы доступа:

104.236.27.189 - - [21/Apr/2017:19:31:28 +0000] "HEAD / HTTP/1.1" 200 0 "-" "curl/7.29.0"

а теперь подпапка:

[root@callloop-web-1 www]# curl -IL callloop.com/blog
HTTP/1.1 301 Moved Permanently
Server: nginx/1.6.3
Date: Fri, 21 Apr 2017 19:33:27 GMT
Content-Type: text/html
Content-Length: 184
Connection: keep-alive
Location: https://callloop.com/blog

HTTP/1.1 301 Moved Permanently
Server: nginx/1.6.3
Date: Fri, 21 Apr 2017 19:33:27 GMT
Content-Type: text/html
Content-Length: 184
Connection: keep-alive
Location: https://www.callloop.com/blog

HTTP/1.1 301 Moved Permanently
Server: nginx/1.6.3
Date: Fri, 21 Apr 2017 19:33:27 GMT
Content-Type: text/html
Content-Length: 184
Location: https://www.callloop.com/blog/
Connection: keep-alive

HTTP/1.1 404 Not Found
Server: nginx/1.6.3
Date: Fri, 21 Apr 2017 19:33:27 GMT
Content-Type: text/html; charset=UTF-8
Connection: keep-alive
Vary: Accept-Encoding
Set-Cookie: PHPSESSID=1lo0hrgkcrsrtstlldnr8gr3o2vu20if; path=/; HttpOnly
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache

доступ к журналам

104.236.27.189 - - [21/Apr/2017:19:33:27 +0000] "HEAD /blog HTTP/1.1" 301 0 "-" "curl/7.29.0"
104.236.27.189 - - [21/Apr/2017:19:33:27 +0000] "HEAD /blog/ HTTP/1.1" 404 0 "-" "curl/7.29.0"

Таким образом, вы можете увидеть 404, имеет смысл, но я понятия не имею, ПОЧЕМУ

1 ответ

Решение

Вам не хватает root утверждение в вашем location ~ /blog/.+\.php$ блок. Но вам может быть легче читать, если вы вложите блоки местоположения:

location ^~ /blog {
    root /var/www/;
    try_files $uri $uri/ /blog/index.php?q=$request_uri;

    location ~ \.php$ {
        try_files $uri =404;
        include       /etc/nginx/fastcgi_params.conf;
        fastcgi_pass  127.0.0.1:9000;
    }
}
server {
        listen       80;
        server_name  www.example.com example.com;
    root        /var/www/deploy/com-ang/;

    client_max_body_size 50M;
    large_client_header_buffers 4 16k;


        location / {
                # First attempt to serve request as file, then
                # as directory, then fall back to displaying a 404.
                #try_files $uri $uri/ =404;
                proxy_pass http://localhost:8080;
                proxy_http_version 1.1;
                proxy_set_header Upgrade $http_upgrade;
                proxy_set_header Connection 'upgrade';
                proxy_set_header Host $host;
                proxy_cache_bypass $http_upgrade;
                #try_files $uri $uri/ =404;
    }

        location ^~ /blog {
                root /var/www/blog/;
                #alias /var/www/blog;
                #index index.php index.html index.htm;
                #try_files $uri $uri/ /blog/index.php?q=$request_uri;
        try_files $uri $uri/ /blog/index.php?$args /blog/index.php?q=$uri&$args;

            #location ^~ /blog/.+\.php$ {
            location ~ \.php$ {
                    #try_files $uri $uri/ /blog/index.php?q=$request_uri =404;
                    try_files $uri =404;
                    include       /etc/nginx/fastcgi_params;
                    fastcgi_pass  127.0.0.1:9000;
                    #fastcgi_pass  unix:/var/run/php-fpm/php-fpm-7.0.sock;
                    #fastcgi_index index.php;
            }
    }

    # redirect server error pages to the static page /40x.html
        #
#        error_page 404 /404.html;
#            location = /40x.html {
#        }

        # redirect server error pages to the static page /50x.html
        #
#        error_page 500 502 503 504 /50x.html;
#            location = /50x.html {
#        }
}
Другие вопросы по тегам