ПРОЕКТЫ 


  АРХИВ 


Apache-Talk @lexa.ru 

Inet-Admins @info.east.ru 

Filmscanners @halftone.co.uk 

Security-alerts @yandex-team.ru 

nginx-ru @sysoev.ru 


  СТАТЬИ 


  ПЕРСОНАЛЬНОЕ 


  ПРОГРАММЫ 



ПИШИТЕ
ПИСЬМА












     АРХИВ :: nginx-ru
Nginx-ru mailing list archive (nginx-ru@sysoev.ru)

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Странная проблема при отсутствии trailing slash в URL


  • To: nginx-ru@xxxxxxxxx
  • Subject: Re: Странная проблема при отсутствии trailing slash в URL
  • From: "Alex Umansky" <alex.umansky@xxxxxxxxx>
  • Date: Tue, 9 Dec 2008 19:55:45 +0200
  • Dkim-signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=domainkey-signature:received:received:message-id:date:from:to :subject:mime-version:content-type; bh=UYYWbnj8/4iIDi+OE1qO/xJx/wTfA8TpNuIEOA9MAvI=; b=seABR3e/H5a3wgXKLJlpLaFJwEZcriQjewXAydIrZ6WNoGGBAs7mlIbavNErtrKg6A nFTVafPJ4Tie3RZSovCrjWYCUlddLxIlwE8gi3UEtSQhdYDzY6i0gfUvZ15oidCrawVw GFC9K/9YjXpCHVnYOy/0fQnIeG/ttAQIUbYnY=
  • Domainkey-signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=message-id:date:from:to:subject:mime-version:content-type; b=vuisRF7M6UB/TTDSobaU8t4YTcigp84xyKqqKFURUU88QjEjwH6EVrZxOqX1XwfBea 6QkLpWWGUjuTJz51Um4fhSL1FgIKFimE4ENz1FQ/4EN0bSqg8/Wt6KalDwSo+e4LdYjt bWOQzb+FM0eX/zOH8ECvKVQklpV/nsOKtHEYo=

Игорь, на этот вопрос мне тяжело ответить..это мой первый опыт и все работало, пока не нашел эту проблему.
 
По идее, я должен проксировать только php на бэкенд, а все остальное должно обрабатываться nginx.
Ну и еще 2 директории, которые из за апликации, надо проксировать полностью на бэкенд а там их ждет index.php
 
Думал, что nginx сам разберется с типом файла (файл или директория) и добавит trailing slash , если надо.
И соответственно продолжит дальше обрабатывать запрос.
 
Соответственно ожидал следующее:
-  404  (от nginx)
 
В итоге вижу, что даже при /data/ idet na бэкенд и там уже ищет index.html ili index.php и дает 404 от апаче, а не от nginx.
Буду благодарен за любую помощь в данном направлении! Видимо намудрил в конфиге...
 
Про location спасибо - проверю.
 
Спасибо!
 
 
On Tue, Dec 09, 2008 at 06:55:31PM +0200, Alex Umansky wrote:

> Но разве, даже без слеша, nginx не должен его дополнять сам?

На основании чего nginx должен дополнять, если запрос уходит
к dynamic.domain.com ?

> Я просто перевел конфиг с языка апаче на nginx...
>
> Полный конфиг этого виртуального хоста:
>
> Могу привести конф с апаче, как ето было пару недель назад
>
> Спасибо
>
> #WWW.domain.com
>    server {
>     proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
>     proxy_set_header   X-Forwarded-Host $http_host;
>     proxy_set_header  Host        $proxy_host;
>     proxy_set_header   X-Forwarded-Server $http_host;
>     proxy_redirect     off;
>
>     client_max_body_size 0M;
>     client_body_buffer_size    128k;
>     client_body_temp_path      /tmp;
>     proxy_connect_timeout      90;
>     proxy_send_timeout         90;
>     proxy_read_timeout          90;
>     proxy_buffer_size          4k;
>     proxy_buffers              4 32k;
>     proxy_busy_buffers_size    64k;
>     proxy_temp_file_write_size 64k;
>     proxy_temp_path            /tmp;
>
>     listen      *:80;
>     server_name   www.domain.com
>     access_log   /var/log/nginx/wwww_log  main;
>     error_log /var/log/nginx/wwww_error_log debug;
> #    rewrite_log on;
>
> location /nginx_status {
>     root /var/www/html;
>     stub_status on;
>     access_log   off;
>     allow xxx.xxx.xxx.xxx;
>     deny all;
>     }
>
> #MAIN LOCATION
>        location / {
>        root /var/www/html/;
>         if (-f $request_filename.php) {
>         proxy_pass http://dynamic.domain.com;
>         break;
>         }
>        }
>
> #PHP AS HTML
>         location /user/user.php {
>           types {}
>           root /var/www/html;
>           default_type text/html;
>         }
>         location /user/profile.php {
>           types {}
>           root /var/www/html;
>           default_type text/html;
>         }
>         location /user/editProfile.php {
>           types {}
>           root /var/www/html;
>           default_type text/html;
>         }
> #PICS PROXY
>         location ~* /([0-9]+)/([0-1][0-9])/ {
>             root         /var/www/html/pics;
>             proxy_pass http://PICS-0-19.ALL <http://pics-0-19.all/>;
>         }
>         location ~* /([0-9]+)/([2-3][0-9])/ {
>             root         /var/www/html/pics;
>             proxy_pass http://PICS-20-39.ALL <http://pics-20-39.all/>;
>         }
>         location ~* /([0-9]+)/([4-5][0-9])/ {
>             root         /var/www/html/pics;
>             proxy_pass http://PICS-40-59.ALL <http://pics-40-59.all/>;
>         }
>         location ~* /([0-9]+)/([6-7][0-9])/ {
>             root         /var/www/html/pics;
>             proxy_pass http://PICS-60-79.ALL <http://pics-60-79.all/>;
>         }
>         location ~* /([0-9]+)/([8-9][0-9])/ {
>             root         /var/www/html/pics;
>             proxy_pass http://PICS-80-99.ALL <http://pics-80-99.all/>;
>         }
>
> #FULL PROXY /BUGREPORT
>         location / {
>         root         /var/www/html/support/bugreport;
>         proxy_pass         http://dynamic.domain.com/;
>         }
> #FULL PROXY /FEEDBACK
>         location / {
>         root         /var/www/html/support/feedback;
>         proxy_pass         http://dynamic.domain.com/;
>         }
>
> #IMAGE EXPIRATION
>         location ~* ^.+\.(jpg|jpeg|gif)$ {
>         root         /var/www/html;
>         expires      30d;
>         }
> #HTML JS CS EXPIRATION
>         location ~* ^.+\.(html|js|css)$ {
>         root         /var/www/html;
>         expires      2h;
>         }
> #XML EXPIRATION
>         location ~ \.xml$ {
>         root         /var/www/html;
>         expires      1d;
>         }
> }

В этой конфигурации есть аж три "location /", работает или второй, или третий.
0.7.x на дублирующиеся location'ы ругается.

#MAIN LOCATION
        location / {
        root /var/www/html/;
         if (-f $request_filename.php) {
         proxy_pass http://dynamic.domain.com;
         break;
         }
       }
#FULL PROXY /BUGREPORT
         location / {
         root         /var/www/html/support/bugreport;
         proxy_pass         http://dynamic.domain.com/;
         }
#FULL PROXY /FEEDBACK
         location / {
         root         /var/www/html/support/feedback;
         proxy_pass         http://dynamic.domain.com/;
         }

> On Tue, Dec 09, 2008 at 06:08:56PM +0200, Alex Umansky wrote:
>
> > Спасибо, Игорь, но это не помогло ;-(
> >
> > Директория содержит поддиректории, никаких текстовых файлов.
> > Да и это не важно..любая директория с/без пхп файлами внутри идет на
> бэкенд
> > через 301 при отсутствии слэша в конце URL
> >
> > proxy_pass срабатывает при / только.
>
> proxy_pass работает, это видно по логу. И там же видно, что именно бэкенд
> возращает "Location: http://dynamic.domain.com/data/";;
> Судя по приведённому конфигу, proxy_pass работать для /data не должен,
> так как нет файла /data/php. Стало быть приведена не та конфигурация.
>
> > Тут что-то с этим trailing slash в конце...я ожидал, что nginx сам добавит
> > слеш, а в итоге  - бэкенд в адрес баре и 301...
>
> Сначала 301, а лишь потом "бэкенд в адрес баре".
>
> > Спасибо

--
Игорь Сысоев
http://sysoev.ru


 




Copyright © Lexa Software, 1996-2009.