Странная проблема при отсутствии trailing slash в URL
Igor Sysoev
is at rambler-co.ru
Tue Dec 9 20:14:55 MSK 2008
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
More information about the nginx-ru
mailing list