У меня небольшая дилемма. Я написал собственный фреймворк PHP MVC и построил на нем CMS. Я решил испытать и nginx + fpm. Это корень моей дилеммы. Меня попросили включить блог на wordpress на мой веб-сайт (да). В нем много контента, и это неосуществимо за то короткое время, когда мне нужно перенести весь контент в мою CMS. По общему признанию, из-за того, что много лет использую Apache, я немного заблудился в использовании nginx.
На моем веб-сайте указан путь к файлу:
/opt/directories/mysite/public/
Файлы wordpress расположены по адресу:
/opt/directories/mysite/news/
Я знаю, что мне просто нужно настроить местоположение (а), которое нацелено на / news [/ *], а затем принудительно помещать все соответствующие URI в index.php внутри. Может ли кто-нибудь указать мне в правильном направлении?
Моя конфигурация ниже:
server {
listen 80;
server_name staging.mysite.com
index index.php;
root /opt/directories/mysite/public;
access_log /var/log/nginx/mysite/access.log;
error_log /var/log/nginx/mysite/error.log;
add_header X-NodeName directory01;
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?route=$uri&$args;
}
location ~ /news {
try_files $uri $uri/ @news;
}
location @news {
fastcgi_pass unix:/tmp/php-fpm.sock;
fastcgi_split_path_info ^(/news)(/.*)$;
fastcgi_param SCRIPT_FILENAME /opt/directories/mysite/news/index.php;
fastcgi_param PATH_INFO $fastcgi_path_info;
}
include fastcgi_params;
include php.conf;
location ~* ^.+.(jpg|jpeg|gif|css|png|js|ico|xml)$ {
access_log off;
expires 30d;
}
## Disable viewing .htaccess & .htpassword
location ~ /\.ht {
deny all;
}
}
Мой файл php.conf:
location ~ \.php {
fastcgi_param QUERY_STRING $query_string;
fastcgi_param REQUEST_METHOD $request_method;
fastcgi_param CONTENT_TYPE $content_type;
fastcgi_param CONTENT_LENGTH $content_length;
fastcgi_param SCRIPT_NAME $fastcgi_script_name;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param REQUEST_URI $request_uri;
fastcgi_param DOCUMENT_URI $document_uri;
fastcgi_param DOCUMENT_ROOT $document_root;
fastcgi_param SERVER_PROTOCOL $server_protocol;
fastcgi_param GATEWAY_INTERFACE CGI/1.1;
fastcgi_param SERVER_SOFTWARE nginx;
fastcgi_param REMOTE_ADDR $remote_addr;
fastcgi_param REMOTE_PORT $remote_port;
fastcgi_param SERVER_ADDR $server_addr;
fastcgi_param SERVER_PORT $server_port;
fastcgi_param SERVER_NAME $server_name;
fastcgi_pass unix:/tmp/php-fpm.sock;
# If you must use PATH_INFO and PATH_TRANSLATED then add
# the following within your location block above
# (make sure $ does not exist after \.php or /index.php/some/path/ will not match):
#fastcgi_split_path_info ^(.+\.php)(/.+)$;
#fastcgi_param PATH_INFO $fastcgi_path_info;
#fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info;
}
файл fastcgi_params:
fastcgi_connect_timeout 60;
fastcgi_send_timeout 180;
fastcgi_read_timeout 180;
fastcgi_buffer_size 128k;
fastcgi_buffers 4 256k;
fastcgi_busy_buffers_size 256k;
fastcgi_temp_file_write_size 256k;
fastcgi_intercept_errors on;
Во многом спасибо @Kromey, я изменил свое местоположение / новости /, но все еще не получаю желаемого результата.
Я смог научиться привязать местоположение ~ my / news, когда обнаружил, что сначала выполняется сопоставление моего местоположения php.
При такой настройке я получаю статус 200, но страница пуста. Любые идеи?
На самом деле это довольно просто и чертовски компактнее, чем аналогичная установка для Wordpress на Apache (я веду 2 блога Wordpress, оба ранее на Apache, и оба недавно перешли на nginx + PHP (не FPM, хотя у меня это работало для время, прежде чем решить, что это было излишним для моих сайтов с низким трафиком)).
location /news/ {
#Need a new root to point to your "aliased" directory
root /opt/directories/news
# This is cool because no php is touched for static content
try_files $uri $uri/ /index.php;
}
Как следует из комментария, любой статический контент (изображения, CSS, JavaScript, robots.txt и т. Д.), Который находится внутри вашего пути Wordpress, обслуживается напрямую, без участия PHP; все иначе перенаправляется на index.php.
Обратите внимание, что try_files
директива является полуновой (кажется, 0.8?), поэтому вам, возможно, придется обновить свой nginx; когда я устанавливал из репозиториев Ubuntu apt, это была слишком старая версия для этого, и конфигурация была настолько сложной, что я apt-get remove
d и установил nginx из исходников (довольно простая операция).