使nginx无法访问上游时忽略站点configuration

在我的nginx中有多个站点configuration,当我重新启动机器时,如果其中一个站点的上游无法到达,nginx根本无法启动,而那些健康的站点不会启动,因此如何让nginx忽略那些无效的网站?

http { ## # Basic Settings ## sendfile on; tcp_nopush on; tcp_nodelay on; keepalive_timeout 65; types_hash_max_size 2048; # server_tokens off; # server_names_hash_bucket_size 64; # server_name_in_redirect off; include /etc/nginx/mime.types; default_type application/octet-stream; ## # Logging Settings ## access_log /var/log/nginx/access.log; error_log /var/log/nginx/error.log; ## # Gzip Settings ## gzip on; gzip_disable "msie6"; # gzip_vary on; # gzip_proxied any; # gzip_comp_level 6; # gzip_buffers 16 8k; # gzip_http_version 1.1; # gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript; ## # nginx-naxsi config ## # Uncomment it if you installed nginx-naxsi ## #include /etc/nginx/naxsi_core.rules; ## # nginx-passenger config ## # Uncomment it if you installed nginx-passenger ## #passenger_root /usr; #passenger_ruby /usr/bin/ruby; ## # Virtual Host Configs ## include /etc/nginx/conf.d/*.conf; include /etc/nginx/sites-enabled/*; } 

和站点启用/ example1是

 upstream example1 { server example1.service.example.com; } server { listen 80; server_name example1.com; location / { proxy_pass http://example1/; proxy_set_header X-Forwarded-For $remote_addr; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; } } 

和站点启用/ example2是

 upstream example2 { server example2.service.example.com; } server { listen 80; server_name example2.com; location / { proxy_pass http://example2/; proxy_set_header X-Forwarded-For $remote_addr; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; } } 

当我重新启动机器,当时example2.service.example.comclosures,nginx将不会启动,即使example1.service.example.com可用,nginx将不会为例1

===== update“is down”的解释:所有的子域名在我自己的dns服务器上被自动注册/注销,所以如果服务器closures,dns在尝试parsing时不会响应这个域名。

最后我find了解决办法,解决了域名insdie位置的问题!

例:

 server { listen 9000; server_name example1.example.com; location / { set $target http://something.service.lab.mu; proxy_pass http://$target; } } 

而nginx在开始时不会尝试parsinghttp://something.service.lab.mu

对于任何人绊倒这个问题,@ cgcgbcbc是正确的。

但是你也需要添加一个

 resolver 8.8.8.8; 

上面的指令

 set $target http://something.service.lab.mu; 

否则你会在nginx中出错,如:

 no resolver defined to resolve