我运行Nginx将请求传递给两台瘦服务器。 该网站大约90%的时间工作,然后每隔一段时间,它只是变得没有反应,我得到这样的错误
2014/11/28 21:40:05 [error] 21516#0: *1458 upstream timed out (110: Connection timed out) while reading response header from upstream,client: XXXX,server: www...com,request: "HEAD / HTTP/1.1",upstream: "http://127.0.0.1:5001/",host: "www.example.com",referrer: "http://www.example.com/"
我在网上search了解决scheme,但不幸的是,大多数情况下,这些问题一直在发生。 在这种情况下,通常意味着Thin只是不运行。 在我的情况下,我的网站大部分时间工作。 我可以ping自己的瘦服务器。 虽然我没有尝试在网站没有响应的时候ping它们。 这可能会让我更深入了解这个问题。
user www-data; worker_processes 2; pid /var/run/Nginx.pid; events { worker_connections 768; multi_accept on; } http { sendfile on; tcp_nopush on; tcp_nodelay on; keepalive_timeout 70; types_hash_max_size 2048; include /etc/Nginx/mime.types; default_type application/octet-stream; client_max_body_size 100M; access_log /var/log/Nginx/access.log; error_log /var/log/Nginx/error.log; gzip on; gzip_disable "msie6"; gzip_static on; gzip_comp_level 6; gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+RSS text/javascript application/octet-stream; ssl_session_cache shared:SSL:10m; ssl_session_timeout 10m; include /etc/Nginx/conf.d/*.conf; include /etc/Nginx/sites-enabled/*; }
和网站启用/默认
Nginx在/usr/share/Nginx/modules/mod-http-image-filter.conf中的testing版本1010002失败,而不是1012000
DigitalOcean上的NodeJS服务器使用socket.io返回连接被拒绝
ngx_lua如何删除http请求头
Moodle 2.0与Nginx的后端
map $http_upgrade $connection_upgrade { default Upgrade; '' close; } upstream example { server 127.0.0.1:5000; server 127.0.0.1:5001; } upstream websocket { server 127.0.0.1:5001; } server { listen 80; listen 443 ssl; keepalive_timeout 70; root /data/example/; index index.html index.htm; server_name www.example.com; ssl_certificate <PATH>; ssl_certificate_key <PATH>; location ~ ^/assets/ { include /etc/Nginx/block.list; expires 1d; add_header Cache-Control public; add_header ETag ""; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header Host $http_host; proxy_redirect off; proxy_pass http://example; } location /websocket { include /etc/Nginx/block.list; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header Host $http_host; proxy_redirect off; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection $connection_upgrade; proxy_pass http://websocket; } location / { include /etc/Nginx/block.list; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header Host $http_host; proxy_redirect off; proxy_pass http://example; } }
我做的最后一件事是删除configuration文件中的一些if语句。 我不确定这是否做了什么。 这个问题从那时起就没有发生过,但是我觉得这个问题还不够长。
编辑:问题确实返回。 我回到原点。
if (-f $request_filename/index.html) { rewrite (.*) $1/index.html break; } if (-f $request_filename.html) { rewrite (.*) $1.html break; } set $flags ""; if (!-f $request_filename) { set $flags "${flags}R"; } if ($flags = "R") { proxy_pass http://example; break; }
Laravel + AngularJS CORS不工作
如何访问docker定制桥networking中的端口
将htaccess转换为Nginx
解决方案结果很简单。 这个问题花了我更多的时间来弄清楚它应该有的。
事实证明,Google Compute Engine在10分钟后有一个防火墙规则来断开闲置的TCP连接。 这意味着Thin与数据库的连接正在断开。
但是,Thin并没有抛出超时错误。 这使得很难确定Nginx超时的来源。 所以也许这是一个薄的错误,我不知道,但我有一个超时参数设置在薄配置一段时间。
解决方案本身就是设置Keepalive设置,即使在空闲时也能保持TCP连接的连接。 详情请参阅: https : //cloud.google.com/compute/docs/troubleshooting#communicatewithinternet 。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。