Articles of nginx

nginx GEOIP在cloudflare proxy后面显示错误的国家(不是最终用户,但是如果代理)

我正在使用Cloudflare和nginx geoip指令: geoip_country /usr/local/share/GeoIP/GeoIP.dat; geoip_city /usr/local/share/GeoIP/GeoLiteCity.dat; 他们正在selectIP(因为请求在标题中被标记为转发,因为是pipaddress ),但是将国家显示为SG(cloudflare代理位置)。 反正如果头HTTP_X_FORWARDED_FOR被设置,以获得最终用户的coutnry? <?php if (getenv(HTTP_X_FORWARDED_FOR)) { $pipaddress = getenv(HTTP_X_FORWARDED_FOR); $ipaddress = getenv(REMOTE_ADDR); echo "Your IP address is : ".$pipaddress. " (via proxy $ipaddress) " ; } else { $ipaddress = getenv(REMOTE_ADDR); echo "Your IP address is : $ipaddress"; } $country = getenv(GEOIP_COUNTRY_NAME); $country_code = getenv(GEOIP_COUNTRY_CODE); echo "<br/>Your country […]

我如何代理传递一个URL在Nginx的位置匹配是一个URL和代理传递有另一个URL

我们在Amazon AWS的S3存储桶中托pipe了一些xml文件。 Web服务器由Nginx提供支持。 对于一个匹配'/super-shots.xml'的特定URL,Nginx必须通过S3位置进行代理传递: http ://mybucket.s3.amazonaws.com/depth0/depth1/depth2/sitemap.xml 我想要的是这个(Nginxconfiguration): location ~* /super-shots.xml { proxy_pass http://mybucket.s3.amazonaws.com/depth0/depth1/depth2/sitemap.xml; } 结果是一个错误: nginx:[emerg]“proxy_pass”不能在正则expression式给出的位置,或者指定位置内,或者if语句内,或者在“limit_except”块内 如果我不做正则expression式匹配(〜* |〜),则没有语法错误,但是页面返回404.请注意,文件在系统path上不存在。 我曾尝试寻找解决scheme,但大多数处理path作为匹配。 我如何解决这个问题? 现在,我已经完成了一个基于path的代理通行证(在下面给出)。 但是,我想要与URL匹配。 #Nginx Config: location /super-shots { proxy_pass http://mybucket.s3.amazonaws.com/depth0/depth1/depth2/sitemap.xml; } # On file system : Empty directory mkdir $docroot/depth0/depth1/depth2/ nginx -s reload 更新1:基于Alexey Ten的评论。 Nginxconfiguration示例可以在这里find

在单个CentOS7服务器上安装40个iSCSI HP 3PAR SAN卷

我需要在运行nginx的单个CentOS7服务器上安装40个HP 3PAR SAN卷iSCSI LUN /目标,每个卷大小为8 TB,并且需要将40个安装点显示为单个共享path。 这样的configuration对性能有很大的影响吗? 换句话说,访问320TB作为单个共享path的推荐方法(性能明智)是什么? 附加信息: 存储(320 TB)包含HLS VOD内容。 用户数量只能访问HLSstream只有30个用户,这就是为什么我认为单个Nginx实例应该足够了。 我使用的CentOS7文件系统是XFS。

如何根据域名在相同IP地址的Nginx服务器之间路由请求?

我正在运行安装了Nginx的Debian服务器以及OpenResty。 我有一个域名,该域名的一个子域名,未来将有多个域名指向其IP地址与Alogging。 我希望每个域或子域的OpenResty服务器运行在不同的端口上,Nginx服务器根据域名在服务器之间路由请求。 所以,现在我有: 指向IP的domain1.com和sub.domain1.com 运行在端口80上的Nginx和路由请求(我在下面解释的configuration更改) domain1.com服务于端口8000, sub.domain1服务于端口8001 我想要: Nginx会让用户看到他们正在访问sub.domain1.com或domain1.com 。 没有domain1.com:8000或sub.domain1.com:8001 将来,当我有domain2.com指向的IP,以及运行在8002端口的服务器,它也出现在用户为domain2.com而不是domain2.com:8002 ,依此类推 我曾尝试使用proxy_pass , proxy_set_header , proxy_redirect ,以各种configuration使用Googlesearchbuild议。 我设法一次有一个proxy_pass工作,但是显示端口给用户。 我试图以这种方式设置的全部原因是,它似乎并没有在多个端口上运行给用户。 另外,我正在使用SSL,并希望HTTP请求redirect到HTTPS。 我意识到,而试图找出这一点,我需要更改代理服务器端口443的SSL请求(要在默认端口上运行)。 这是我得到它与子域的工作: Nginx的configuration( /etc/nginx/nginx.conf )是默认的,但有以下例外: 删除了虚拟主机包含指令: #include /etc/nginx/conf.d/*.conf; #include /etc/nginx/sites-enabled/*; 在http { }块中添加domain1.com的证书: ssl_certificate /path/to/public.pem; ssl_certificate_key /path/to/private.pem; 为我的代理定义了以下内容: server { listen 443 ssl; ssl on; server_name dev.domain1.com; location / { proxy_pass https://sub.domain1.com:8001; […]

Nginx TLS性能优化

我上个星期把一个繁忙的站点切换到了TLS,而且是HTTP / 2。 绩效并没有像预期的那样有所提高。 事实上,取决于你如何衡量,你可以说它已经退化了。 有足够的空间来进一步优化服务器,在操作系统级别的TCP调整,在networking堆栈中的TLSconfiguration等。为了确保我没有忽略任何改进的地方,我在这里张贴我的思路为他人鸣钟在。 目前,SSL conf就是这样显示的。 各方控制着这方面的各种要素,我没有直接控制这一切。 域名审查。 $ openssl s_client -state -CAfile Documents/Thawte\ Server\ CA.cer -connect xxxxxx.tld:443 CONNECTED(00000003) SSL_connect:before/connect initialization SSL_connect:SSLv2/v3 write client hello A SSL_connect:SSLv3 read server hello A depth=3 /C=SE/O=AddTrust AB/OU=AddTrust External TTP Network/CN=AddTrust External CA Root verify error:num=19:self signed certificate in certificate chain verify return:0 SSL_connect:SSLv3 read server certificate […]

如何添加回退到我的代理在Nginx?

我试图通过nginx为我的节点应用程序构build代理,因为如果节点应用程序失败或端口上不可用,这会给我错误页面。 节点应用程序在127.0.0.1:1337运行,我正在监听mydomain:8080并转发它。 server { listen 8080; server_name mydomain; access_log /log/path/logging.log; root /path/to/root/; error_page 400 401 402 403 404 500 501 502 503 504 /error/index.html; location / { proxy_redirect off; proxy_pass_header Server; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Scheme $scheme; proxy_set_header Host $http_host; proxy_set_header X-NginX-Proxy true; proxy_connect_timeout 5; proxy_read_timeout 240; proxy_intercept_errors on; proxy_pass http://127.0.0.1:1337; } […]

Nginx proxy_passredirect到错误的URL

我已经设置Nginx / Apache2 / WordPress使用代理caching,以防止多余的服务器负载(狗屎主题和插件)。 一切正常,但是一旦你点击了Wp-Admin,它就会redirect到http://backend:82反对http://example.com/wp-admin 。 我从Nginx / Apache Proxy_pass教程获取configuration 。 我怀疑这是wp-admin / login规则,但看起来就像其他的代理传递规则,所以我很难过。 我的configuration如下: proxy_cache_path /var/run/nginx-cache levels=1:2 keys_zone=main:15m inactive=60m; #proxy_temp_path /var/run/nginx_cache; server { listen 80 default_server; listen [::]:80 default_server ipv6only=on; server_name ########; # Set proxy headers for the passthrough proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; # Let the Set-Cookie header […]

OCSP装订可以提高CloudFlare背后的网站的性能吗?

如果一个网站试图提高使用CloudFlare CDN(或任何真正的CDN) 已经进行OCSP装订的网站的性能(如果使用CloudFlare上的“ 完全SSL ”设置),则在其Nginx实例上configurationOCSP装订 ? 在此设置中,当浏览器从CloudFlare保护/caching站点请求页面时,他们使用TLS连接到CloudFlare,然后使用TLS连接到源Web服务器以检索新生成的页面。 这意味着两组SSL协商完成,增加了检索页面所需的时间。 另外,HTTP / 2意味着连接通常只在每个网站上完成一次,无论要下载多less资源。 如果CloudFlare检查源Web服务器证书的CRL,我想OCSP装订可以减less所需的检查,从而缩短SSL安装时间。 不过,我不是这方面的专家,所以我会很欣赏这方面的想法。 来自CloudFlare的一些信息是否有帮助(这表明它不会帮助性能) 感谢您的问题。 目前我们不对原产地证书进行吊销检查。 但是,如果使用公开信任的证书(而且没有太大困难),我们可能会在某种程度上build议装订OCSP。

Nginx代理在38 kB之后停止

我有一个简单的nginx 1.4.6代理在专用的Ubuntu 14服务器上运行。 我的configuration如下所示: server { listen 80; listen 443 ssl; listen [::]:80; listen [::]:443 ssl; server_name impequid.dodekeract.report; ssl_certificate /etc/letsencrypt/live/impequid.dodekeract.report/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/impequid.dodekeract.report/privkey.pem; location / { proxy_pass http://127.0.0.1:44400; proxy_set_header Host $host;proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; } } 当我试图达到这个文件,它发送一小部分后超时。 它总是停在同一条线上。 后端运行一个Node.js / Koa服务器,该文件可以直接加载,没有任何问题。 当通过nginx加载时,Koa在尝试写入时报告了一个坏的pipe道错误,因为问题只发生在nginx上,我不认为这是Koa的错。 任何想法我做错了什么?

nginx-proxy通过http和https返回503错误

我将nginx-proxy设置为运行应用程序服务器的Docker容器前面的反向代理。 它们在单独的Docker组合定义中定义。 出于某种原因,我得到了一个503 ,但我不知道为什么,我已经详细了解了nginx-proxy文档。 (我也打开这个作为github问题的nginx-proxy 。) 应用程序服务器最初为https提供了443的10443主机。 我切换到服务HTTP 80 10443暴露在主机上。 我可以从应用服务器直接curl,但通过nginx-proxy卷发抛出一个错误 我最初在443有nginx-proxy,但现在我把它换成了80 。 直到我添加default.crt和default.key ,我得到一个连接拒绝错误。 join后,我得到了503 。 curl http://foo.example.com:80/apidocs –verbose –insecure * Hostname was NOT found in DNS cache * Trying 10.xxx.. * Connected to foo.example.com (10.xxx) port 80 (#0) > GET /apidocs HTTP/1.1 > User-Agent: curl/7.35.0 > Host: foo.example.com > Accept: */* > < […]