无法设置nginx来服务我的分段网站

我有一些麻烦设置nginx服务我的分期网站。 我所做的是更改server_name,但由于某些原因,它不工作。

urlscheme是“domain.foo”是生产,“staging.domain.foo”正在升级,“foobar.domain.foo”是一个Web服务,“foobar.staging.domain.foo”是相同的升级版本webserver,“. domain.foo”被路由到一些s3的静态HTML,“. staging.domain.foo”被路由到另一个桶中的s3静态HTML。 所有生产url都能正常工作,并且configuration正确,所有的分段URL都不起作用。

这是我的conf文件。 你会看到一些重复,我会很乐意接受任何更正/优化,我是一个编码器和configuration服务器绝对不是我的事情(但我渴望学习和改善…)。

server { listen 80; ## listen for ipv4 server_name "domain.foo" "www.domain.foo" default_server; access_log /var/log/nginx/access.log; client_max_body_size 5M; location / { proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Host $http_host; proxy_redirect off; location ~* \.(jpg|jpeg|gif|png|ico|css|bmp|js|html)$ { access_log off; expires max; root /home/foo/Foo/current/public; break; } if ($host ~ 'www.domain.foo') { rewrite ^/(.*)$ http://domain/foo/$1 permanent; } proxy_pass http://production; break; } } server { listen 80; server_name "staging.domain.foo"; access_log /var/log/nginx/access.staging.log; error_log /var/log/nginx/error.staging.log; client_max_body_size 5M; location / { proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Host $http_host; proxy_redirect off; proxy_pass http://staging; break; } } server { listen 80; ## listen for ipv4 server_name "foobar.domain.foo"; access_log /var/log/nginx/access.log; location / { proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Host $http_host; proxy_redirect off; if ($host = 'foobar.domain.foo') { proxy_pass http://foobar; break; } } } server { listen 80; ## listen for ipv4 server_name foobar.staging.domain.foo; location / { proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Host $http_host; proxy_redirect off; proxy_pass http://foobar_staging; break; } } server { listen 80; server_name "~^(.+)\.domain\.foo$"; location / { proxy_intercept_errors on; error_page 404 = http://domain.foo/404; set $subdomain $1; rewrite /$ "/$subdomain/index.html" break; rewrite ^ /$subdomain$request_uri? break; proxy_pass http://bucket.domain.foo.s3.amazonaws.com; } } server { listen 80; server_name "~^(.+)\.staging\.domain\.foo$"; location / { proxy_intercept_errors on; set $subdomain $1; rewrite /$ "/$subdomain/index.html" break; rewrite ^ /$subdomain$request_uri? break; proxy_pass http://bucket.staging.domain.foo.s3.amazonaws.com; } } upstream production { server 111.255.111.110:8000; server 111.255.111.110:8001; server 111.255.111.110:8002; server 111.255.111.110:8003; } upstream staging { server 222.255.222.222:8000; server 222.255.222.222:8001; } upstream foobar { server 111.255.222.165:9000; server 111.255.222.165:9001; server 111.255.222.165:9002; } upstream foobar_staging { server 222.255.222.222:9000; } 

当我将浏览器指向staging.domain.foo时,会发生什么情况呢? 在日志中找不到任何内容,但是例如将创buildaccess.staging.log和errors.staging.log。

任何人有一个想法? 🙂

DNS在这里经常是个问题。 确保您的客户端和服务器都可以解决:

 staging.domain.foo 

如果没有为这些设置DNS,请更新服务器上和桌面上的/ etc / hosts文件。

Nginx使用Host:头匹配服务器名称:

将传入的HTTP请求的主机头与Nginxconfiguration文件中的服务器{…}块进行比较,并select第一个匹配的。

http://wiki.nginx.org/HttpCoreModule#server

如果找不到匹配,则将使用第一个监听节。