@lamerboy

Как в nginx добавить несколько location?

Решил перенести проект с Apache на Nginx, но возникли проблемы с несколькими location, до переноса правила в htaccess были такими:
spoiler
RewriteEngine on
RewriteBase /

RewriteRule ^js/(.*) compress/js.php?load=$1 [QSA,L]
RewriteRule ^css/(.*) compress/css.php?load=$1 [QSA,L]

RewriteCond %{REQUEST_URI} (/|\.htm|\.php|\.html|/[^.]*)$  [NC]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule (.*) index.php [QSA,L]



После переноса на Nginx конфиг такой:
spoiler
server {
	server_name dev.test.ru www.dev.test.ru;
	charset UTF-8;
	index index.html index.php;
	disable_symlinks if_not_owner from=$root_path;
	include /etc/nginx/vhosts-includes/*.conf;
	include /etc/nginx/vhosts-resources/dev.test.ru/*.conf;
	access_log /var/www/httpd-logs/dev.test.ru.access.log;
	error_log /var/www/httpd-logs/dev.test.ru.error.log notice;
	ssi on;
	set $root_path /var/www/www-root/data/www/dev.test.ru;
	root $root_path;
	
	location / {
    location ~ [^/]\.ph(p\d*|tml)$ {
    try_files /does_not_exists @php;
    }
    
    location /js {
      rewrite ^/js/(.*) /compress/js.php?load=$1 break;
    }
    
    location /css {
      rewrite ^/css/(.*) /compress/css.php?load=$1 break;
    }

    location / {
    try_files $uri $uri/ /index.php?$args; # permalinks
    }
    }
	
	listen 12.12.12.38:80;
	location @php {
		fastcgi_index index.php;
		fastcgi_param PHP_ADMIN_VALUE "sendmail_path = /usr/sbin/sendmail -t -i -f info@test.ru";
		fastcgi_pass unix:/var/www/php-fpm/www-root.sock;
		fastcgi_split_path_info ^((?U).+\.ph(?:p\d*|tml))(/?.+)$;
		try_files $uri =404;
		include fastcgi_params;
	}
}
server {
	server_name dev.test.ru www.dev.test.ru;
	ssl on;
	ssl_certificate "/var/www/httpd-cert/www-root/dev.test.ru.crt";
	ssl_certificate_key "/var/www/httpd-cert/www-root/dev.test.ru.key";
	ssl_ciphers EECDH:+AES256:-3DES:RSA+AES:!NULL:!RC4;
	ssl_prefer_server_ciphers on;
	ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
	add_header Strict-Transport-Security "max-age=31536000;";
	ssl_dhparam /etc/ssl/certs/dhparam4096.pem;
	charset UTF-8;
	index index.html index.php;
	disable_symlinks if_not_owner from=$root_path;
	include /etc/nginx/vhosts-includes/*.conf;
	include /etc/nginx/vhosts-resources/dev.test.ru/*.conf;
	access_log /var/www/httpd-logs/dev.test.ru.access.log;
	error_log /var/www/httpd-logs/dev.test.ru.error.log notice;
	ssi on;
	set $root_path /var/www/www-root/data/www/dev.test.ru;
	root $root_path;
	
	location / {
    location ~ [^/]\.ph(p\d*|tml)$ {
    try_files /does_not_exists @php;
    }
    
    location /js {
      rewrite ^/js/(.*) /compress/js.php?load=$1 break;
    }
    
    location /css {
      rewrite ^/css/(.*) /compress/css.php?load=$1 break;
    }
    
    location / {
        try_files $uri $uri/ /index.php?$args; # permalinks
    }
    }
    
	listen 12.12.12.38:443;
	
	
	
	location @php {
		fastcgi_index index.php;
		fastcgi_param PHP_ADMIN_VALUE "sendmail_path = /usr/sbin/sendmail -t -i -f info@test.ru";
		fastcgi_pass unix:/var/www/php-fpm/www-root.sock;
		fastcgi_split_path_info ^((?U).+\.ph(?:p\d*|tml))(/?.+)$;
		try_files $uri =404;
		include fastcgi_params;
	}
}



Но работает только ЧПУ сайта, остальные правила выводят PHP как текст, т.е. скрипты для компрессии JS и CSS не выполняются как скрипты, а выводятся текстом в браузер.
Перепробовал уже разные варианты из примеров в инете, ни один не получилось завести.

Помогите, пожалуйста, настроить несколько location в Nginx, вот последний вариант, который тоже не заводится:

location / {
    location ~ [^/]\.ph(p\d*|tml)$ {
    try_files /does_not_exists @php;
    }
    location /js {
      rewrite ^/js/(.*) /compress/js.php?load=$1 break;
    }
    location /css {
      rewrite ^/css/(.*) /compress/css.php?load=$1 break;
    }
    location / {
        try_files $uri $uri/ /index.php?$args; # permalinks
    }
}


Да, кстати, конфиг сгенерировал ispmanager, я менял только блок location.
  • Вопрос задан
  • 161 просмотр
Решения вопроса 1
@lamerboy Автор вопроса
Вопрос решён, помог сервис конвертации htaccess в конфиг для Nginx awww.anilcetin.com
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
daager
@daager
Так используйте try_files. Как пример:
rewrite ^/js/(.*) /compress/js.php?load=$1 break; => try_files $uri /compress/js.php?args;
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через TM ID
Похожие вопросы
D2C.io Екатеринбург
от 45 000 руб.
Social Systems Москва
от 80 000 до 160 000 руб.
ИП Ласилкин СИ Коломна
от 70 000 до 100 000 руб.
20 авг. 2018, в 21:21
30000 руб./за проект
20 авг. 2018, в 20:46
5000 руб./за проект
20 авг. 2018, в 20:38
700 руб./в час