nginx: автоматическое добавление слеша для директорий

pachanga

Новичок
Поставил 0.3.23, блоки такие же - все равно редиректит на 8080 :( (бьется головой об стенку)

Что у тебя выше в конфиге, если не секрет?

-~{}~ 30.05.06 17:04:

Автор оригинала: si
pachanga
так стоп. я запутался. я так понимаю ты привел сильно обрезаный конфиг, покажи полный для одного vh.
/etc/nginx/nginx.conf

Код:
user  apache apache;
worker_processes  1;

error_log /var/log/nginx/error_log info;

events {
	worker_connections  8192;
	use rtsig;
}

http {
	include		/etc/nginx/mime.types;
	default_type	application/octet-stream;
  
	log_format main
		'$remote_addr - $remote_user [$time_local] '
        	'"$request" $status $bytes_sent '
		'"$http_referer" "$http_user_agent" '
		'"$gzip_ratio"';
									       
	client_header_timeout	10m;
	client_body_timeout	10m;
	send_timeout		10m;

	connection_pool_size		256;
	client_header_buffer_size	1k;
	large_client_header_buffers	4 2k;
	request_pool_size		4k;

	gzip on;
	gzip_min_length	1100;
	gzip_buffers	4 8k;
	gzip_types	text/plain;

	output_buffers	1 32k;
	postpone_output	1460;

	sendfile	on;
	tcp_nopush	on;
	tcp_nodelay	on;

	keepalive_timeout	75 20;

	ignore_invalid_headers	on;
	index index.html;

  # хост по умолчанию, если нет совпадения с секциями server, указанными ниже, то
  # все запросы сразу отдаются Apache
  server {
          listen 80;
          # Ниже будет приведен код этого инклюда
          include /etc/nginx/proxy.conf;
  }

  # частный хост, таких у меня много, меняется только server_name и root
  server {
          listen 80;
          server_name  server1.com;
          include /etc/nginx/proxy.conf;

          # для читабельности сократил строку
          location ~* ^.+\.(jpg|jpeg|png|js)$ {
              root /var/www/server1.com;
          }
  }  
}
/etc/nginx/proxy.conf

Код:
location / {
    proxy_pass         [url]http://x.x.x.x:8080/;[/url]
    proxy_redirect     default;

    proxy_set_header   Host             $host;
    proxy_set_header   X-Real-IP        $remote_addr;
    proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;

    client_max_body_size       10m;
    client_body_buffer_size    128k;

    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;
}
-~{}~ 30.05.06 17:07:

Автор оригинала: fixxxer
такие вот блоки
Код:
    server {
        listen  83.222.XXXXXXX;
        server_name *.hostname.com;
        access_log /home/XXX.log; 
        location ~* \.(html?|gif|jpe?g|png|txt|zip|doc|xls|rar|avi)$ {
                root /home/XXXX/www;
        }
        location / {
                proxy_pass [url]http://127.0.0.1:8080/;[/url]
                proxy_set_header X-Real-IP $remote_addr;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                proxy_set_header Host hostname.com;
        }
    }
Вообще, по логике вещей, здесь никак не прописано, как реагировать на директорию без слеша. Я подозреваю, что на самом деле и у тебя тоже идет внутренний редирект к Apache, но не явный.
 

si

Administrator
так теперь почему ты хочешь чтобы nginx делал какието редиректы если у тебя запрос ужодит на апача ? nginx сделает редирект если он обрабатывает сам локатион

вот кусок из debug лога

2006/05/30 16:35:46 [debug] 23530#0: *286 http filename: "/home/sitnikov/public_html/test/aaa"
2006/05/30 16:35:46 [debug] 23530#0: *286 add cleanup: 080B1C34
2006/05/30 16:35:46 [debug] 23530#0: *286 http static fd: 11
2006/05/30 16:35:46 [debug] 23530#0: *286 http dir
2006/05/30 16:35:46 [debug] 23530#0: *286 http finalize request: 301, "/test/aaa?"
2006/05/30 16:35:46 [debug] 23530#0: *286 http special response: 301, "/test/aaa"
2006/05/30 16:35:46 [debug] 23530#0: *286 http set discard body
2006/05/30 16:35:46 [debug] 23530#0: *286 HTTP/1.1 301 Moved Permanently

запрос бы http://host/test/aaa

конфиг:

location /test {
root /home/sitnikov/public_html;
}

т.к. у тебя запрос уходит на апача оно тоже должно работать, теперь объясни что именно не работает. я так подозреваю что проблема с портами в редиректе.
 

pachanga

Новичок
Автор оригинала: si
так теперь почему ты хочешь чтобы nginx делал какието редиректы если у тебя запрос ужодит на апача ? nginx сделает редирект если он обрабатывает сам локатион
Давай еще раз с самого начала, а то я тут всех запутал. Итак:

(кстати, я не утверждаю, что этот вариант настройки оптимальный, поэтому заранее извините за криворукость)

1) nginx используется в качестве прокси на 80 порту перед тяжелым Apache на 8080

2) Apache использует большое количество vhosts, каждый vhost необходимо уникально настроить соответственно и в настройках nginx(опции server_name, root). Поэтому для начала nginx обслуживает только несколько тестовых виртуальных хостов, запросы к остальным виртуальным хостам сразу отдаются Apache. Для этого и есть первая секция server:

Код:
  server {
          listen 80;    
          include /etc/nginx/proxy.conf;
  }
3) Чтобы не засорять настроечный файл повторяющимися параметрами, общие proxy настройки вынесены в /etc/nginx/proxy.conf :

Код:
location / {
    proxy_pass         [url]http://x.x.x.x:8080/;[/url]
    proxy_redirect     default;

    proxy_set_header   Host             $host;
    proxy_set_header   X-Real-IP        $remote_addr;
    proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;

    client_max_body_size       10m;
    client_body_buffer_size    128k;

    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;
}
4) Виртуальные хосты обслуживаемые nginx имеют вид:

Код:
  server {
          listen 80;
          server_name  server1;
          include /etc/nginx/proxy.conf;

          location ~* ^.+\.(jpg|jpeg...|ico)$ {
              root /var/www/server1;
          }


я так подозреваю что проблема с портами в редиректе.
Да, что-то происходит странное при 301 редиректе подставляется по непонятной причине порт 8080, где висит Apache :( Может что-то с настройками Apache?

-~{}~ 31.05.06 13:03:

Ой, прошу извинить за поднятый шум - просто надо было сделать, чтобы Apache висел на 127.0.0.1:80 не 8080, тогда редиректы проходят прозрачно.

Вопрос в том, как это работает у fixxer'а? :)
 

si

Administrator
у тебя апача выдавал редирект если видел что url это dir а т.к. у него порт был 8080 вот он и редиректил на него, это можно было поправить либо как ты сам и сделал (имхо так даже лучше) либо через proxy_redirect в nginx

у fixxera это работает потому что у него nginx лезет сам за файлом на диск и видит что это dir и поступает также как апача выдает редирект. в твоем же случае все кроме "pg|jpeg...|ico" уходит на апача и nginx не остается ситуаций где такое он может сделать
 
Сверху