Re: rewrite в именованный location

Gena Makhomed gmm at csdoc.com
Thu Jul 30 19:50:41 MSD 2009


On Thursday, July 30, 2009 at 14:37:39, Борис Долгов wrote:

БД> Мне кажется, можно даже ввести что-то типа

БД> http {
БД>     configuration x {
БД>         fastcgi_pass ....
БД>         прочее;
БД>     }
БД>     server {
БД>         location @php {
БД>             use x;
БД>         }
БД>         location ~\.php$ {
БД>             use x;
БД>         }
БД>     }
БД> }

БД> которые все будут храниться в памяти только 1 раз.

по сути это аналог директивы include, только вместо того,
чтобы делать много мелких файлов для include, можно будет
сделать именованные фрагменты конфигурации в одном файле.

например:

http {

    config http_backend {
        proxy_set_header  Host $host;
        proxy_set_header  X-Real-IP $remote_addr;
        proxy_set_header  X-Nginx-Scheme $scheme;
        proxy_pass http://127.0.0.1/;
    }

    config fastcgi_backend {
        ...
    }

    server {
        server_name www.example.com;
        location / {
            use http_backend;
        }
    }

    server {
        server_name www.example.net;
        location / {
            use fastcgi_backend;
        }
    }
}

если в различных виртуальных серверах nginx
есть одинаковые фрагменты конфига, например,
отдача статических файлов или контролируемые
скачивания - это тоже кандидаты на config { }

аналогично, через один блок config { }
можно было бы описать общие фрагменты
конфигурации для http и https-серверов,
при внесении изменений - надо будет
править конфиг только в одном месте.

DRY principle - Don't repeat yourself.

PS параметр "ssl" в директиве "listen"
можно использовать только для полностью
идентичных конфигураций. например, если
для location /admin/ у https сервера
нужен один конфиг, а у http сервера -
редирект на https, тогда придется делать
два полностью отдельных конфига server { },
или использовать внутри if, что еще хуже,
или несколько файлов и использовать include,
что становится еще более неудобным при большом
количестве виртуальных хостов на сервере.
удобнее было бы 1 хост == 1 файл конфига,
и include /etc/nginx/conf/virtual/*.conf;

-- 
Best regards,
 Gena






More information about the nginx-ru mailing list