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