我在同一主机上运行多个Ruby应用程序:
~/app1 ~/app2 ~/app3
我想要让nginx代理这些应用程序使用子目录,如:
http://example.com/app1 http://example.com/app2 http://example.com/app3
我很好奇,如果nginx支持我可以在多个文件中定义这些位置,那么我可以保留每个configuration与应用程序,而不是有一个单一的configuration文件的所有应用程序:
~/app1/nginx.conf ~/app2/nginx.conf ~/app3/nginx.conf
我在3个configuration文件的每个configuration文件中定义一个单独的位置指令的服务器的天真尝试导致conflicting server name "example.com" on [::]:80, ignoredconfiguration,如下所示:
upstream app1 { server 127.0.0.1:4567; } server { listen [::]:80; listen 80; servername example.com location /app1 { proxy_pass http://app1; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; proxy_set_header Host $http_host; proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header X-Forwarded-For $remote_addr; proxy_set_header X-Forwarded-Port $server_port; proxy_set_header X-Request-Start $msec; } }
有没有办法像这样组织configuration?
您可以通过include包含外部configuration:
include /path/to/config1.conf; include /path/to/config2.conf; include /path/to/confdir/*.conf; server { server_name example.com; listen [::]:80; listen 80; }
而在单独的configuration中,您可以使用任何有效的代码块:
upstream app1 { server 127.0.0.1:8080; } location /app1 { proxy_pass http://app1; }
我相信,你可以使用这个configuration:
server { server_name example.com; listen [::]:80; listen 80; include /path/to/applications/*/nginx.conf; }
然后在每个应用程序的目录中configuration像这样的redirect:
location /app1 { proxy_pass http://app1; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; proxy_set_header Host $http_host; proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header X-Forwarded-For $remote_addr; proxy_set_header X-Forwarded-Port $server_port; proxy_set_header X-Request-Start $msec; }