Vesta Control Panel - Forum

Community Forum

Skip to content

Advanced search
  • Quick links
    • Main site
    • Github repo
    • Google Search
  • FAQ
  • Login
  • Register
  • Board index Language specific forums Russian (Русский) Веб сервер
  • Search

Rewrite для nginx + php-fpm

Вопросы по работе Веб сервера
Apache + Nginx, Nginx + PHP5-FPM
Post Reply
  • Print view
Advanced search
6 posts • Page 1 of 1
Foton
Posts: 9
Joined: Wed Oct 02, 2013 5:52 am

Rewrite для nginx + php-fpm
  • Quote

Post by Foton » Wed Nov 25, 2015 8:57 am

Перешёл с apache на nginx + php-fpm и пытаюсь сделать замену для htaccess.
Правила вроде составил

Code: Select all

        location /tags {
                rewrite ^/tags/([^/]*)/$ /tags/?tag=$1&key=tags break;
            } 
        location / {
                if (!-e $request_filename){ rewrite ^(.*)$ /index.php?q=$1 break; }
            }
догадываюсь, что их следует записать в файл /home/admin/conf/web/nginx.conf, но не понимаю в каком месте, чтобы было правильно. Перед основным location? После него? Внутри до того, что там уже есть или после?

Code: Select all

server {
    listen      xxx.xxx.xxx.xxx:80;
    server_name site.ru www.site.ru;
    root        /home/admin/web/site.ru/public_html;
    index       index.php index.html index.htm;
    access_log  /var/log/nginx/domains/site.ru.log combined;
    access_log  /var/log/nginx/domains/site.ru.bytes bytes;
    error_log   /var/log/nginx/domains/site.ru.error.log error;    

    location / {
        location ~* ^.+\.(jpeg|jpg|png|gif|bmp|ico|svg|css|js)$ {
            expires     max;
        }
        location ~ [^/]\.php(/|$) {
            fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
            if (!-f $document_root$fastcgi_script_name) {
                return  404;
            }
            fastcgi_pass    127.0.0.1:9001;
            fastcgi_index   index.php;
            include         /etc/nginx/fastcgi_params;
        }
    }
    error_page  403 /error/404.html;
    error_page  404 /error/404.html;
    error_page  500 502 503 504 /error/50x.html;
    location /error/ {
        alias   /home/admin/web/site.ru/document_errors/;
    }
    location ~* "/\.(htaccess|htpasswd)$" {
        deny    all;
        return  404;
    }
    include     /etc/nginx/conf.d/phpmyadmin.inc*;
    include     /etc/nginx/conf.d/phppgadmin.inc*;
    include     /etc/nginx/conf.d/webmail.inc*;
    include     /home/admin/conf/web/nginx.site.ru.conf*;
}
Подскажите, пожалуйста, что и куда.
Top

Stesh
Posts: 348
Joined: Mon Nov 09, 2015 5:52 pm

Os: CentOS 6x
Web: nginx + php-fpm
Re: Rewrite для nginx + php-fpm
  • Quote

Post by Stesh » Wed Nov 25, 2015 2:05 pm

Добавлять можно после

Code: Select all

error_log   /var/log/nginx/domains/site.ru.error.log error;    
А конструкция

Code: Select all

        location / {
                if (!-e $request_filename){ rewrite ^(.*)$ /index.php?q=$1 break; }
            }
не слишком удачная. С try_files будет элегантней

Code: Select all

try_files $uri $uri/ /index.php?$query_string;
Top

Foton
Posts: 9
Joined: Wed Oct 02, 2013 5:52 am

Re: Rewrite для nginx + php-fpm
  • Quote

Post by Foton » Thu Nov 26, 2015 6:59 am

Stesh wrote:Добавлять можно после

Code: Select all

error_log   /var/log/nginx/domains/site.ru.error.log error;    
Когда добавляю свои правила после error_log отдельно, то nginx отказывается запускаться:

Code: Select all

Nov 26 01:24:32 site.ru systemd[1]: Starting nginx - high performance web server...
Nov 26 01:24:32 site.ru nginx[23051]: nginx: [emerg] duplicate location "/" in /home/admin/conf/web/nginx.conf:17
Nov 26 01:24:32 site.ru  nginx[23051]: nginx: configuration file /etc/nginx/nginx.conf test failed
Nov 26 01:24:32 site.ru  systemd[1]: nginx.service: control process exited, code=exited status=1
Nov 26 01:24:32 site.ru  systemd[1]: Failed to start nginx - high performance web server.
Nov 26 01:24:32 site.ru  systemd[1]: Unit nginx.service entered failed state.
Т.е. двух одинаковых location не должно быть. Если же пишу свои правила внутри созданного Вестой location /, то они не работают (обращение к любому адресу сайта выдаёт 500-ую ошибку).
А конструкция

Code: Select all

        location / {
                if (!-e $request_filename){ rewrite ^(.*)$ /index.php?q=$1 break; }
            }
не слишком удачная. С try_files будет элегантней

Code: Select all

try_files $uri $uri/ /index.php?$query_string;
Спасибо! Читал, что использование if не рекомендуется, но как обойтись без него не нашёл.
Top

Stesh
Posts: 348
Joined: Mon Nov 09, 2015 5:52 pm

Os: CentOS 6x
Web: nginx + php-fpm
Re: Rewrite для nginx + php-fpm
  • Quote

Post by Stesh » Thu Nov 26, 2015 9:05 am

Показываю для примера

Code: Select all

    error_log   /var/log/блабла;
    
	rewrite ^/((urllist|sitemap_).*\.(xml|txt)(\.gz)?)$ /vbseo_sitemap/vbseo_getsitemap.php?sitemap=$1 last;

    location / {
        try_files $uri $uri/ /index.php?q=$uri&$args;
    }
    
    location ~* ^.+.(js|css|png|jpg|jpeg|gif|ico|xsl)$ {
	access_log        off;
	expires           max;
    }
    
    location ~ \.php?$ {
    include /home/блабла/conf/web/php.conf;
    }
PS: локейшн /tags с вложенным реврайтом можно вписать в любом месте, а финт ушами с try_files добавить к корневому локейшену.
Top

SPEC1AL1ST
Posts: 142
Joined: Sun Aug 10, 2014 1:32 pm

Re: Rewrite для nginx + php-fpm
  • Quote

Post by SPEC1AL1ST » Fri Feb 03, 2017 9:03 pm

Я свой код

Code: Select all

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
Перевел в nginx как

Code: Select all

location / {
if (!-e $request_filename){
rewrite ^(.*)$ /index.php break;
}
}
Вставляю вместо

Code: Select all

    location / {

        location ~* ^.+\.(jpeg|jpg|png|gif|bmp|ico|svg|css|js)$ {
            expires     max;
        }

        location ~ [^/]\.php(/|$) {
            fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
            if (!-f $document_root$fastcgi_script_name) {
                return  404;
            }

            fastcgi_pass    127.0.0.1:9004;
            fastcgi_index   index.php;
            include         /etc/nginx/fastcgi_params;
        }
    }
Но почему то не работает. Кто может помочь с правильным кодом или может я делаю что-либо не так?
Top

Stesh
Posts: 348
Joined: Mon Nov 09, 2015 5:52 pm

Os: CentOS 6x
Web: nginx + php-fpm
Re: Rewrite для nginx + php-fpm
  • Quote

Post by Stesh » Sun Feb 05, 2017 1:14 am

Вместо

Code: Select all

    location / {

        location ~* ^.+\.(jpeg|jpg|png|gif|bmp|ico|svg|css|js)$ {
            expires     max;
        }
вот так

Code: Select all

    location / {
        try_files $uri $uri/ /index.php?$uri&$args;
        location ~* ^.+\.(jpeg|jpg|png|gif|bmp|ico|svg|css|js)$ {
            expires     max;
        }
Т.е. добавить строчку

Code: Select all

try_files $uri $uri/ /index.php?$uri&$args;
Больше никаких изменений в оригинальном конфиге не требуется, т.е вот ту отсебятину убрать.
Top


Post Reply
  • Print view

6 posts • Page 1 of 1

Return to “Веб сервер”



  • Board index
  • All times are UTC
  • Delete all board cookies
  • The team
Powered by phpBB® Forum Software © phpBB Limited
*Original Author: Brad Veryard
*Updated to 3.2 by MannixMD
 

 

Login  •  Register

I forgot my password