我运行的网站使用Django,Nginx,Gunicorn,Supervisord和fail2ban(只允许ssh,http和https)。 该网站是生活和正常工作,但有一些nginx错误日志条目涉及: connect() failed (111: Connection refused) while connecting to upstream, client: xxxx, server: www.example.com, request: "GET /example/url/to/get/ HTTP/1.1", upstream: "http://[::1]:8000/example/url/to/get/", host: "www.example.com" upstream server temporarily disabled while connecting to upstream, client: xxxx, server: www.example.com, request: "GET /example/url/to/get/ HTTP/1.1", upstream: "http://[::1]:8000/example/url/to/get/", host: "www.example.com" 这是我的nginxconfiguration: upstream app_server_wsgiapp { server localhost:8000 fail_timeout=0; } server { listen 80; […]
我试图创build一个自定义的redirect规则,但它的工作。 日志对我没有帮助。 我想configuration2个规则: /api/appname/* => http://appname-edge:3000/appname/* /appname/* => http://appname-ui:80/* 这是我的尝试: server { listen 80; server_name localhost; # redirect /api/myApp => http://myApp-edge:3000/myApp/ location ~* "^\/api\/(.*?)\/(.*)" { proxy_pass http://$1-edge:3000/$1/$2; } # redirect /myApp => http://myApp-ui:80/ location ~* "^\/(.*?)\/(.*)" { proxy_pass http://$1-ui/$2; } location / { root /usr/share/nginx/html; index index.html index.htm; } error_page 500 502 503 504 /50x.html; […]
我一直在Nginx上运行一个奇怪的行为,请求在主机名中有一个尾随点,即domain.com. 而不是单独的domain.com 。 我build立了一个简单的服务器configuration来testing,如下所示: server { listen 80; server_name example.com.; root /var/www/example; index server1.txt; } server { listen 80; server_name example.com; root /var/www/example; index server2.txt; } 最初,我预料到对example.com.请求example.com. 将被发送到第一个块,对example.com请求将被发送到第二个块。 请求的Host头不匹配任何块,例如www.example.com ,我希望再次发送到第一个块,因为它是默认的隐式。 但是,经过testing,我发现对example.com.请求example.com. 被发送到第二块。 在用各种替代名称,正则expression式等搞乱了一阵子之后,我决定把$hostvariables写到一个自定义头文件中,这样我就可以查看它了。 事实certificate,Nginx实际上是从$host值中删除了尾部的点。 据我可以告诉在example.com.收到的请求example.com. 被认为与在example.com收到的相同,至less就服务器select而言。 这似乎是不可取的,因为尾随的点会导致各种错误。 。 为了使事情变得更加混乱,在一些Googlesearch之后,我发现了在0.1.29更新日志中的Nginx更新日志页面: 修正:nginx没有考虑到“主机”标题行中的尾部点。 然后,几年后,1.5.9更新日志说: 错误修复:parsing器不理解带有尾点的域名。 感谢伊春张。 虽然我不确定“parsing器”是否指的是Nginx组件在接收请求时正在播放。 (从阅读文档,这听起来也许parsing器不会做任何事情,除非一个请求被缠绕到其他主机,其名称必须解决。) 这里发生了什么? Nginx是否应该在评估服务器名称时丢弃最后的点? 如果这是预期的行为,那么不应该从server_name参数中删除尾部点,以产生“冲突的服务器名称”错误? 我知道一个没有小点的域名在技术上是一个“相对的”域名,而不是“绝对的”,尽pipe现在大多数人似乎都把它们看作是相对的. 所以它没有实际的区别。 但是如果需要的话,Nginx是否应该至less能够做出这样的区分呢? 最后,是否有更好的方法来捕捉和redirect对example.com.请求example.com. 比添加if ($http_host = […]
我们正在使用docker,因为1/2年的“单一主机”设置没有麻烦。 但是现在我们想进一步使用Docker Swarm(最新版本)。 我们之前的设置只是将nginx作为Reverse-Proxys的单个主机,以及一些用于更新configuration并为新服务请求SSL证书的魔法。 我不明白:如何使用Docker Swarm设置故障转移/ HA 例如: 3个虚拟机都是Master + Worker(我知道不是完美的设置,但是我们必须省钱)。 现在让我们说GoDaddy与像myswarm.com这样的域名,这个域名必须设置为一个外部IP,我会selectSwarms虚拟机的外部IP地址,它应该可以工作。 但是当链接到域的虚拟机出现故障时会发生什么? 如何用Docker处理这种情况? 还是我需要2个HAProxy虚拟机和一些面向外部的VIP?
我不是在Linux / Ubuntu的专家..只要知道绝对的基础知识,无论我已经阅读了stackoverflow。 我试图在EC2服务器上安装pagespeed(在nginx上),按照以下步骤进行: https ://modpagespeed.com/doc/build_ngx_pagespeed_from_source 现在看起来有2个nginx的安装 在我的网站正在运行的EC2服务器(/ etc / nginx)上预先安装的一个。 这是版本1.4.6 刚刚按照pagespeed安装说明(/ usr / sbin – 我认为这是path,但不知道)安装的新的一个…我相信这是最新的/更新的版本。 现在,我不想丢失第一个安装,因为LIVE生产站点正在运行。 configuration和设置工作正常,不希望他们搞砸。 我的假设是,pagespeed安装将发生在现有的设置,没有其他的事情会改变。 这是我错了的地方。 这是我的问题: 有没有办法回滚我做的新的设置/安装? 我该怎么做? 如何在现有服务器(/ etc / nginx)上设置/使用pagespeed而不丢失任何设置或在现有服务器上遭受严重停机。 最后一个选项,我怎样才能configuration我的网站function从较新的安装nginx(/ usr / sbin?)假设这个开关将是容易和快速。 要遵循什么步骤? 如果我select#3,我怎样才能删除/卸载旧版本的nginx? 希望你们能帮忙。 最好!
有没有可能用nginx做这样的事情? if ( $http_user_agent = "wget" ){ server { listen 11.11.11.11:1111; root /website1/; server_name example.com www.example.com; else server { listen 22.22.22.22:22222; root /website2/; server_name example2.com www.example2.com; }
我知道DNS只能parsing域名,但让我解释一下我的问题,我想知道如何才能解决这个特定的需求。 我有一个要求营销,使世界网站融合成一个单一的领域。 例如,当你有: www.somedomain.com.mx www.somedomain.co.uk www.somedomain.co.jp 现在他们想要这个: www.somedomain.com/mx www.somedomain.com/uk www.somedomain.com/jp www.somedomain.com 但是由于我们有服务器在不同的位置由于延迟要求,他们希望: www.somedomain.com goes to the US Server www.somedomain.com/mx goes to the US Server www.somedomain.com/uk goes to the UK Server www.somedomain.com/jp goes to the Japan Server 我可以设置nginx作为反向代理,例如在美国: 来自日本的用户访问www.somedomain.com/jp。 Nginx在www.somedomain.com服务器(美国)回答,然后从日本服务器请求内容,然后将响应中继给日本用户。 所以: Japan user -> US nginx -> Japan server -> US nginx -> Japan user 这会导致更多的延迟。 […]
我已经做了一段时间,它似乎工作正常,但我想我会检查什么好的做法是FQDN。 现在我的服务器设置为(让我们假装)主机名myhostname ,我有一个域注册为myhostname.com ,我域Aloggingwww和@指向我的公共IP。 我的主机文件如下所示: 127.0.0.1 localhost localhost.local my.static.ip.ex myhostname.com myhostname 将您的FQDN设置为二级域名是错误的吗?
我正在使用nginx通过使用SSL的本地连接来为我的Nextclowd实例提供服务(在这种情况下,域名称为nextclowd.raspi.local ,它使用自签名证书)。 现在我想通过一个DDNS域来访问它,我也想使用SSL进行encryption(我已经为该域生成了一个Let's Encrypt证书)。 但是现在我在使用这两个证书时遇到问题。 我也可以为我的本地连接使用DDNS证书,但是总是会引发警告,因为证书与域不匹配。 我也想避免定义两个虚拟主机条目(因为configuration冗余)。 我也读了一些关于SNI的事情,但是从我所能理解的不是我想要的。 是否有可能让nginxselect正确的SSL证书基于在同一虚拟主机上访问的域名? 这是我当前的vhost文件供参考: server { listen 80; server_name nextclowd.raspi.local mydomain.ddns.net; # enforce https return 301 https://$server_name$request_uri; } server { listen 443 ssl; server_name nextclowd.raspi.local mydomain.ddns.net; # My self-signed SSL certificate #ssl_certificate /etc/nginx/ssl/server.crt; #ssl_certificate_key /etc/nginx/ssl/server.key; # My Let's Encrypt SSL certificate ssl_certificate /etc/letsencrypt/live/mydomain.ddns.net/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/mydomain.ddns.net/privkey.pem; # Add headers to […]
昨天我们遇到了一个DDoS攻击到达我们的networking服务器后端(apache2)。 前端由与web服务器的haproxy负载均衡连接组成。 在apache的access.log上,我们看到了来自两个ips的数千个请求,几个小时后,我们意识到这些是伪造/欺骗,而不是实际的ips。 出于澄清的原因,我们做了一个“curl GET /”,IP为“137.137.136.136”,实际上这就是我们在networking日志中看到的ip(假的) 现在,在另一个使用nginx作为反向代理的集群中,更改/制作X-Forwarded-For标题不起作用。 意思是,即使你在特定的头文件中input一个随机的ip,nginx仍然会把正确的ip传给后端的web服务器? 这是否与haproxy有关? 任何人都可以确认制作的X-Forwarded-For头可以通过haproxy? 为什么这不在nginx中发生? 你怎么防止这个?