Хочу в конфиге виртуального хоста, в одном месте, указать путь где лежат все приложения и название приложения. А остальные данные формировать на основе этих переменных.
Попробовал сделать так:
set $app dobroserver-blog;
set $app_path /data/projects/$app;
upstream $app {
server unix:$app_path/shared/unicorn.sock fail_timeout=0;
}
server {
listen localhost:80;
keepalive_timeout 5;
client_max_body_size 1G;
client_body_buffer_size 128k;
root $app_path/current/public;
access_log off;
error_log $app_path/shared/log/nginx_error.log;
rewrite_log on;
# Rails error pages
error_page 500 502 503 504 /500.html;
location = /500.html {}
# Rails assets pipeline
location ~ ^/assets/ {
expires 1y;
add_header Cache-Control public;
add_header ETag "";
break;
}
location / {
try_files $uri @unicorn;
}
location @unicorn {
proxy_pass http://$app;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
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;
}
}
Но конечно же nginx ругается:
nginx: [emerg] "set" directive is not allowed here
Но если я перенесу переменные в server {}, то для upstream {} придётся путь прописывать вручную.