Многие люди наверняка сталкиваются с поиском рабочих конфигураций виртуальных хостов Nginx для различных CMS. Несмотря на свою популярность рабочие конфиги для этого web-сервера иной раз приходится долго и упорно искать или подбирать самому. Я решил собрать здесь то, с чем мне когда-либо приходилось работать в этой сфере… Все эти конфиги рассчитаны на работу Nginx в связке с PHP-FPM. Также прошу обратить внимание, что указанное значение сокета PHP-FPM в данных примерах может отличаться в зависимости от ОС и конкретных настроек и версии PHP-FPM.
Данные примеры виртуальных хостов полностью работоспособны, но возможно вам понадобится их немного изменить под свою конфигурацию Nginx и PHP-FPM, чтобы все заработало, как положено. Проверить корректность нового конфига виртуального хоста или изменений в нем можно проверить командой nginx -t и лишь при положительном рапорте перезапускайте Nginx и если требуется, PHP-FPM и Memcached.
Все конфиги спрятаны под спойлерами, чтобы вам не пришлось прокручивать простыни текста .
<spoiler|dokuwiki.vhost>
server {
listen 80;
listen [::]:80;
server_name wiki.server.tld www.wiki.server.tld; # Где server.tld - ваш домен
charset utf-8;
autoindex off;
client_max_body_size 25M;
client_body_buffer_size 128k;
index index.html index.htm index.php doku.php;
access_log /var/log/nginx/wiki_access.log;
error_log /var/log/nginx/wiki_error.log;
root /var/www/dokuwiki; # Укажите свой путь до рабочего каталога Dokuwiki
location ~ ^/lib.*\.(gif|png|ico|jpg)$ {
expires 30d;
}
location = /robots.txt { access_log off; log_not_found off; }
location = /favicon.ico { access_log off; log_not_found off; }
location ~ /\. { access_log off; log_not_found off; deny all; }
location ~ ~$ { access_log off; log_not_found off; deny all; }
location / {
rewrite ^/_media/(.*) /lib/exe/fetch.php?media=$1 last;
rewrite ^/_detail/(.*) /lib/exe/detail.php?media=$1 last;
rewrite ^/_export/([^/]+)/(.*) /doku.php?do=export_$1&id=$2 last;
rewrite ^/(.*) /doku.php?id=$1 last;
try_files $uri $uri/ @dokuwiki;
}
location ~ \.php$ {
try_files $uri =404;
fastcgi_pass unix:/var/run/php/php7.0-fpm.sock; # Путь до сокета PHP
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include /etc/nginx/fastcgi_params;
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_intercept_errors on;
fastcgi_ignore_client_abort off;
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;
}
location ~ /(data|conf|bin|inc)/ {
deny all;
}
location ~ /(data|conf|bin|inc)/ {
deny all;
}
location ~ /\.ht {
deny all;
}
}
</spoiler>
<spoiler|seafile.vhost>
server {
listen 80;
server_name cloud.server.tld www.cloud.server.tld; # Где server.tld - ваш домен
root /var/www/seafile/seafile-server; # Здесь вы можете указать путь к каталогу, отличный от указанного.
charset utf-8;
autoindex off;
access_log /var/log/nginx/seafile_access.log;
error_log /var/log/nginx/seafile_error.log;
client_max_body_size 10G;
location = /robots.txt {
allow all;
log_not_found off;
access_log off;
}
location / {
fastcgi_pass 127.0.0.2:80;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_script_name;
fastcgi_param SERVER_PROTOCOL $server_protocol;
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 SERVER_ADDR $server_addr;
fastcgi_param SERVER_PORT $server_port;
fastcgi_param SERVER_NAME $server_name;
fastcgi_param REMOTE_ADDR $remote_addr;
access_log /var/log/nginx/seahub.access.log;
error_log /var/log/nginx/seahub.error.log;
fastcgi_read_timeout 36000;
}
location /seafhttp {
rewrite ^/seafhttp(.*)$ $1 break;
proxy_pass http://127.0.0.2:8082;
client_max_body_size 0;
proxy_connect_timeout 36000s;
proxy_read_timeout 36000s;
proxy_send_timeout 36000s;
send_timeout 36000s;
}
location /media {
root /var/www/seafile/seafile-server/seahub;
}
location ~* \.(?:jpg|jpeg|gif|bmp|ico|png|css|js|swf)$ {
expires 30d;
access_log off;
}
}
</spoiler>
<spoiler|owncloud.vhost>
server {
listen 80;
#listen 443 default ssl; # Если используете HTTPS
server_name cloud.server.tld www.cloud.server.tld; # Где server.tld - ваш домен
root /var/www/owncloud;
# ssl on; # Если используете HTTPS
#ssl_certificate /etc/nginx/ssl/server.crt;
#ssl_certificate_key /etc/nginx/ssl/server.key;
#ssl_protocols SSLv3 TLSv1 TLSv1.1 TLSv1.2;
#ssl_ciphers HIGH:!aNULL:!MD5;
access_log /var/log/nginx/owncloud_access.log;
error_log /var/log/nginx/owncloud_error.log;
client_max_body_size 10G;
rewrite ^/caldav(.*)$ /remote.php/caldav$1 redirect;
rewrite ^/carddav(.*)$ /remote.php/carddav$1 redirect;
rewrite ^/webdav(.*)$ /remote.php/webdav$1 redirect;
index index.php;
error_page 403 /core/templates/403.php;
error_page 404 /core/templates/404.php;
location = /robots.txt {
allow all;
log_not_found off;
access_log off;
}
charset utf-8;
autoindex off;
location ~ ^/(?:\.|data|config|db_structure\.xml|README) {
deny all;
}
location / {
rewrite ^/.well-known/host-meta /public.php?service=host-meta last;
rewrite ^/.well-known/host-meta.json /public.php?service=host-meta-json last;
rewrite ^/.well-known/carddav /remote.php/carddav/ redirect;
rewrite ^/.well-known/caldav /remote.php/caldav/ redirect;
rewrite ^(/core/doc/[^\/]+/)$ $1/index.html;
try_files $uri $uri/ index.php;
}
location ~ ^(.+?\.php)(/.*)?$ {
try_files $1 =404;
fastcgi_pass unix:/var/run/php/php7.0-fpm.sock;
include common/php-fpm;
include fastcgi_params;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$1;
fastcgi_param PATH_INFO $2;
#fastcgi_param HTTPS $https; # Если используете HTTPS
fastcgi_intercept_errors on;
fastcgi_buffers 64 4K;
}
location ~* \.(?:jpg|jpeg|gif|bmp|ico|png|css|js|swf)$ {
expires 30d;
access_log off;
}
}
</spoiler>
<spoiler|modx.vhost>
server {
listen 80;
listen [::]:80;
server_name server.tld www.server.tld; # где server.tld - ваш домен
charset utf-8;
autoindex off;
access_log /var/log/nginx/modx_access.log;
error_log /var/log/nginx/modx_error.log;
root /var/www/modx; # укажите свой путь до рабочей директории
index index.php;
client_max_body_size 30M;
location / {
if (!-e $request_filename) {
rewrite ^/(.*)$ /index.php?q=$1 last;}
}
location ~ \.php$ {
try_files $uri =404;
fastcgi_split_path_info ^(.+\.php)(.*)$;
fastcgi_pass unix:/var/run/php/php7.0-fpm.sock; #путь до сокета PHP
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
fastcgi_ignore_client_abort on;
fastcgi_param SERVER_NAME $http_host;
}
if (!-e $request_filename) {
rewrite ^.+/?(/wp-.*) $1 last;
rewrite ^.+/?(/.*\.php)$ $1 last;
rewrite ^(.+)$ /index.php?q=$1 last;
}
location ~ /\.ht {
deny all;
}
}
</spoiler>
<spoiler|wordpress.vhost>
server {
listen 80;
listen [::]:80;
server_name server.tld www.server.tld; # где server.tld - ваш домен;
root /var/www/wordpress; #путь до директории сайта
index index.html index.php;
autoindex off;
charset utf-8;
expires epoch;
disable_symlinks if_not_owner from=$document_root;
client_max_body_size 25M;
client_body_buffer_size 128k;
access_log /var/log/nginx/wp_access.log;
error_log /var/log/nginx/wp_error.log;
gzip on;
gzip_disable "msie6";
gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript application/javascript;
location ~ /\. {
deny all;
}
location ~* /(?:uploads|files)/.*\.php$ {
deny all;
}
location ~* ^.+\.(ogg|ogv|svg|svgz|eot|otf|woff|mp4|ttf|rss|atom|jpg|jpeg|gif|png|ico|zip|tgz|gz|rar|bz2|doc|xls|exe|ppt|tar|mid|midi|wav|bmp|rtf)$ {
access_log off;
log_not_found off;
expires max;
}
location / {
try_files $uri $uri/ /index.php?$args;
}
location ~ \.php$ {
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass unix:/var/run/php/php7.0-fpm.sock; #путь до сокета PHP
fastcgi_index index.php;
include fastcgi_params;
try_files $uri = 404;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param DOCUMENT_ROOT $document_root;
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_intercept_errors on;
fastcgi_ignore_client_abort off;
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;
}
}
</spoiler>
<spoiler|joomla.vhost>
</spoiler>