On Wed, 21 Jun 2006, Igor Sysoev wrote:
IS> Вот это вот
IS> server_name $http_host;
IS> я не заметил. Так нельзя.
Ага. то есть вообще server_name не указывать.
Можно так:
server_name _ ;
IS>
IS> > location = / {
IS> > root /www/$sroot/html;
IS> > index index.html index.shtml index.htm index.php;
IS> > }
IS> > location / {
IS> > proxy_pass http://127.0.0.1;
IS> > }
IS> > }
IS> >
IS> > фигу - в качестве $document_root пишет root от первого из описанных
IS> > серверов.
IS> >
IS> > Где я не вижу очевидного?
IS>
IS> Вырожденный сервер нужно поместить в начало. Или во всех listen
IS> для него указать default.
Да, map принялся хвататься. Зато почему-то не раскрывается переменная:
root /$sroot/html;
directory index of "/$sroot/html/" is forbidden
Это багофига: если ни одни индекс не найден, то в сообщении $sroot
не раскрывается. Буду лечить.
Прилагаемый патч исправляет сообщение.
Игорь Сысоев
http://sysoev.ru
--- src/http/ngx_http_core_module.c Mon May 29 19:21:59 2006
+++ src/http/ngx_http_core_module.c Wed Jun 21 16:26:02 2006
@@ -519,6 +519,7 @@
ngx_http_core_run_phases(ngx_http_request_t *r)
{
ngx_int_t rc;
+ ngx_str_t path;
ngx_http_handler_pt *h;
ngx_http_core_loc_conf_t *clcf;
ngx_http_core_main_conf_t *cmcf;
@@ -642,11 +643,10 @@
if (r->uri.data[r->uri.len - 1] == '/' && !r->zero_in_uri) {
- clcf = ngx_http_get_module_loc_conf(r, ngx_http_core_module);
-
- ngx_log_error(NGX_LOG_ERR, r->connection->log, 0,
- "directory index of \"%V%V\" is forbidden",
- &clcf->root, &r->uri);
+ if (ngx_http_map_uri_to_path(r, &path, 0) != NULL) {
+ ngx_log_error(NGX_LOG_ERR, r->connection->log, 0,
+ "directory index of \"%V\" is forbidden", &path);
+ }
ngx_http_finalize_request(r, NGX_HTTP_FORBIDDEN);
return;