我需要有一个ALB设置的健康检查path,指向一个有docker容器Nginx的服务器。 我没有访问EC2服务器内的文件。 我可以在Docker-Container中添加一些东西
我已经尝试了下面的解决scheme,但它不适合我,因为我有我的configuration文件中的另一个阻止,我猜。
适用于AWS的Nginx解决scheme亚马逊ELB运行状况检查 – 不带IF的情况下返回200
我的configuration文件如下所示:
server { listen 443 ssl http2; server_name server-test.com; access_log /var/log/nginx/nginx.access.log; error_log /var/log/nginx/nginx.error.log; ssl on; ssl_certificate /etc/nginx/ssl/cert.pem; ssl_certificate_key /etc/nginx/ssl/server.key; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_prefer_server_ciphers on; ssl_ciphers 'ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256'; ssl_session_timeout 1d; ssl_session_cache builtin:1000 shared:SSL:10m; ssl_session_tickets off; location / { proxy_pass http://server-test.io:5015/; 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; client_max_body_size 10m; client_body_buffer_size 128k; 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; } } ... ... ... # Health check url server { location /elb-status { access_log off; return 200 'A-OK!'; add_header Content-Type text/plain; } } # Redirect non-existing domains to 404 server { server_name _; listen 80 default_server; return 404; } server { server_name _; listen 443 ssl; ssl_certificate /etc/nginx/ssl/cert.pem; ssl_certificate_key /etc/nginx/ssl/server.key; return 404; }
当我打开服务器的path/ ELB状态,它给了我404 Not Found。 LoadBalancer下的服务器状态也是不好的。 我认为这是因为块:“redirect不存在的域”,但我也需要有该块。
任何帮助,将不胜感激。
基于Andy回复编辑:
Nginx容器同时使用端口80和443,我已经为这些服务器设置了目标组,这些服务器包括基于这些端口的Nginx docker容器,但是服务器健康检查仍然不健康。
有什么我在这里失踪?
如何在另一个端口上运行包含location /elb-status的server块?
创buildALB时,有一个Advanced health check settings下拉菜单。 在这些设置中,您可以覆盖健康检查端口。 您可以将端口设置为8080 ,然后您的server变成:
server { listen 8080; location /elb-status { access_log off; return 200 'A-OK!'; add_header Content-Type text/plain; } }
在此设置中,不需要基于虚拟主机的路由进行运行状况检查。 8080端口将专门用于健康检查。
不要忘记在ALB和EC2实例之间的安全组中打开适当的端口,如果您select了此路线。