Nginx - WordPress конфиг рядом со страницей с API - PullRequest
1 голос
/ 02 октября 2019

У меня есть сайт на Nginx со страницей и API для него. Расположение html-страницы:

var / www / mysite / mysite_rest

, а расположение API -

var / www / mysite /mysite_rest / api

Следующая конфигурация прекрасно работает для меня:

server {
listen 80;
server_name example.com;
#    return 301 https://$host$request_uri;
return 301 https://example.com;
rewrite ^ https://example.com$request_uri? permanent;

client_max_body_size 350M;
}

server {
listen 443 ssl http2;
server_name example.com;

charset UTF-8;

# certs sent to the client in SERVER HELLO are concatenated in 
ssl_certificate
ssl_certificate /etc/ssl/example.crt;
ssl_certificate_key /etc/ssl/example.key;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 30m;
keepalive_timeout 70;
ssl_session_tickets off;

ssl_dhparam /etc/ssl/dhparam.pem;

ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers off;

# ssl_stapling on;
ssl_trusted_certificate /etc/ssl/example.crt;
# resolver 8.8.8.8;

# HSTS (ngx_http_headers_module is required) (63072000 seconds)
add_header Strict-Transport-Security "max-age=63072000" always;
# add_header Strict-Transport-Security max-age=31536000 always;
add_header X-Frame-Options DENY;
# add_header Public-Key-Pins 'pin-sha256="base64+info1="; max-age=31536000' 
always;

add_header X-Content-Type-Options nosniff;
add_header X-XSS-Protection "1; mode=block";

##
rewrite ^/(.*)/$ /$1 permanent;
rewrite ^/api/(.*)$ /api/index.php?_url=/$1 last;
rewrite ^/api$ /api/index.php?_url=/ last;

##

location / {
root /var/www/mysite/mysite_rest;
charset utf-8;
index index.php index.html;
}

location /api {
        internal;
        root /var/www/mysite/mysite_rest/api;
        index index.php;
        include /etc/nginx/fastcgi_params;
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
 #            fastcgi_pass unix:/var/run/php7.1-fpm.sock;
        fastcgi_pass 127.0.0.1:9000;
         #    fastcgi_param SCRIPT_FILENAME $document_root/index.php;
       fastcgi_param SCRIPT_FILENAME /var/www/mysite/mysite_rest/api/index.php;
   fastcgi_param SCRIPT_NAME index.php;
        fastcgi_param HTTPS on;
#        fastcgi_param HTTP_HTTPS on;
    fastcgi_param REQUEST_SCHEME https;
    fastcgi_param SERVER_PORT 443;

   }         
}

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

var / www / mysite / wp

папка, затем в Nginx conf добавляется следующая строка:

    location /wp {
        internal;
        root /var/www/mysite/wp;
        index index.php;
        include /etc/nginx/fastcgi_params;
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
#            fastcgi_pass unix:/var/run/php7.1-fpm.sock;
        fastcgi_pass 127.0.0.1:9000;
        #    fastcgi_param SCRIPT_FILENAME $document_root/index.php;
       fastcgi_param SCRIPT_FILENAME /var/www/mysite/wp/index.php;
   fastcgi_param SCRIPT_NAME index.php;
#            fastcgi_param HTTPS on;
    fastcgi_param HTTP_HTTPS on;
    fastcgi_param REQUEST_SCHEME https;
    fastcgi_param SERVER_PORT 443;
} 

Результат запроса url: example.com/ wp - 404. Что я делаю не так?

UPD1 При удалении «внутреннего» запрос переписывается на https://example.comindex.php/wp-admin/install.php

UPD2 Добавить следующие строки для местоположения wordpressp вместо предыдущего:

location ^~ /wp {
root /var/www/mysite/mysite_rest;
index index.php index.html index.htm;
try_files $uri $uri/ /wp/index.php;

location ~ \.php {
fastcgi_split_path_info ^(.*\.php)(.*)$;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info;
fastcgi_pass 127.0.0.1:9000;
}

Это позволило мне запустить установку, но, когда я запрашиваю example.com/wp, это вызывает ERR_TOO_MANY_REDIRECTS. Я могу получить доступ к /wp-login.php по запросу вручную.

1 Ответ

0 голосов
/ 02 октября 2019

Вы использовали директиву internal, которая запрещает внешний доступ к location. Директива root неверна, и у вас нет возможности загрузить статические файлы WordPress.

Вы можете попробовать что-то вроде этого:

location ^~ /wp {
    root /var/www/mysite;
    index index.php;

    try_files $uri $uri/ /wp/index.php;

    location ~ \.php$ {        
        include /etc/nginx/fastcgi_params;
        fastcgi_pass 127.0.0.1:9000;
        fastcgi_param SCRIPT_FILENAME $request_filename;
    }
}

Не забудьте настроить WordPress с правильнымURL. Подробнее см. в этом документе .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...