Nginx rewrite для сайта в подпапке

Доброго времени суток!
Подскажите, пожайлуста, как правильно прописать правила для nginx при использовании сайта в подпапке.
Т.е. есть главный сайт site.ru
В папку site.ru/site2/ установлен еще один сайт с MODx.
Sergey Pozhidaev
30 ноября 2015, 14:44
modx.pro
6 348
0

Комментарии: 12

Abu
Abu
01 декабря 2015, 03:56
+2
А сами файлы на сервере в отдельной директории? Если да, то по советам stackoverflow, просто добавить location в server {} отдельный root и правила для него.

location /site2/ {
                root /var/www/path/site2;

                # Do this inside of a location so it can be negated
                location ~ \.php$ {
                        try_files $uri $uri/ =404; # Don't let php execute non-existent php files
                        include fastcgi_params;
                        fastcgi_pass backend-site1;

                        include    /etc/nginx/mime.types;
                        include    /etc/nginx/fastcgi.conf;
                        default_type application/octet-stream;

                }

                location ~* ^.+\.(jpg|jpeg|gif|png|js|ico|bmp)$ {
                        access_log       off;
                        expires          10d;
                        break;
                }
        }
    Sergey Pozhidaev
    01 декабря 2015, 04:22
    0
    В том и проблема. Изначально планировалось разносить сайты по поддоменам, а теперь нужно по подпапками и соответственно сайт, лежащий в корне «перебивает» правила для подпапок. Теперь основной сайт тоже в подпапку надо переносить или есть, все таки, способ хитро прописать правила?
      Abu
      Abu
      01 декабря 2015, 04:35
      +1
      С вышеприведенными настройками у меня сайты работают, находясь физически в /var/www/site1/ и /var/www/site2/, но открываются правильно по
      http://site1/ и http://site1/site2

      Если оба сайта на модекс, то должны быть и получше решения, с использованием единой установки, кажется тут было что-то похожее.
        Sergey Pozhidaev
        01 декабря 2015, 04:37
        0
        Спасибо, надо попробовать такой конфиг. А дружественные урл работают в таком случае? Единая установка уже не годиться т.к. разрабатывались сайты независимо друг от друга и объединять их это ад адский уже будет :-)
          Abu
          Abu
          01 декабря 2015, 04:43
          0
          Все должно работать.
            Sergey Pozhidaev
            01 декабря 2015, 06:19
            0
            Почему-то не хочет заводиться, а вы бы не могли полный конфиг сбросить, вместе с корневым сайтом или ссылку дайте на stackoverflow, где это обсуждалось.
              Abu
              Abu
              01 декабря 2015, 06:39
              0
              Конфиг довольно специфичный т.к. там сайты не на модекс, может поэтому. А почему не заводится? nginx -t должен проблему показать.
                Sergey Pozhidaev
                01 декабря 2015, 06:58
                0
                upstream backend-rez {server unix:/var/run/php5-rez.sock;}
                
                server {
                	listen				80;
                	server_name			site.ru www.site.ru;
                	root				/var/www/site/www;
                	access_log			/var/log/nginx/site-access.log;
                	error_log			/var/log/nginx/site-error.log;
                	index				index.php index.html;
                	rewrite_log			on;
                	if ($host != 'site.ru' ) {
                		rewrite			^/(.*)$  http://site.ru/$1  permanent;
                	}
                
                	location ~* ^/core/ {
                		deny			all;
                	}
                	location / {
                		try_files		$uri $uri/ @rewrite;
                	}
                	location /index.html {
                		rewrite			/ / permanent;
                	}
                
                	location ~ ^/(.*?)/index\.html$ {
                		rewrite			^/(.*?)/ // permanent;
                	}
                	location @rewrite {
                		rewrite			^/(.*)$ /index.php?q=$1;
                	}
                	location ~ \.php$ {
                		include			fastcgi_params;
                		fastcgi_param	SCRIPT_FILENAME $document_root$fastcgi_script_name;
                		fastcgi_pass	backend-rez;
                	}
                	location ~* ^.+\.(jpg|jpeg|gif|css|png|js|ico|bmp)$ {
                	   access_log		off;
                	   expires			10d;
                	   break;
                	}
                	location ~ /\.ht {
                		deny			all;
                	}
                
                	location /site2/ {
                	    root /var/www/site2
                
                	    location ~* ^/core/ {
                        		deny			all;
                        	}
                        	location / {
                        		try_files		$uri $uri/ @rewrite;
                        	}
                        	location /index.html {
                        		rewrite			/ / permanent;
                        	}
                
                        	location ~ ^/(.*?)/index\.html$ {
                        		rewrite			^/(.*?)/ // permanent;
                        	}
                        	location @rewrite {
                        		rewrite			^/(.*)$ /index.php?q=$1;
                        	}
                        	location ~ \.php$ {
                        		include			fastcgi_params;
                        		fastcgi_param	SCRIPT_FILENAME $document_root$fastcgi_script_name;
                        		fastcgi_pass	backend-rez;
                        	}
                        	location ~* ^.+\.(jpg|jpeg|gif|css|png|js|ico|bmp)$ {
                        	   access_log		off;
                        	   expires			10d;
                        	   break;
                        	}
                        	location ~ /\.ht {
                        		deny			all;
                	}
                }
                Ну если я вас правильно понял мы просто создаем еще один location с другим root и дублируем туда все правила для rewrite.
                Но где-то ошибка получается и nginx не хочет стартовать.
                  Abu
                  Abu
                  01 декабря 2015, 07:12
                  0
                  в консоли nginx -t ошибки показывает. В нашем случае
                  directive «root» is not terminated by ";"
                  пропустил ";" после root
                    Sergey Pozhidaev
                    01 декабря 2015, 07:35
                    0
                    Да действительно. Теперь ошибка:
                    [emerg] location "/" is outside location "/site2/"[emerg] location "/" is outside location "/site2/"
                      Abu
                      Abu
                      01 декабря 2015, 17:59
                      0
                      Для modx выходит сложнее.
Sergey Pozhidaev
01 декабря 2015, 04:37
0
del
    Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
    12