Articles of nginx

nginx没有定义$ scheme

我刚刚从nginx 1.4.1升级到1.8.0(随着升级到Phusion Passenger 5.0.13)。 随着这种改变,我们configuration中的$schemevariables不再被设置。 nginxconfiguration看起来像这样: server { listen 80; listen 443; ssl on; server_name app.example.com; passenger_enabled on; passenger_env_var HTTP_X_FORWARDED_PROTO $scheme; proxy_set_header X-Forwarded-Proto $scheme; … } 当我检查Rails应用程序中的request.env['HTTP_X_FORWARDED_PROTO']或request.headers['X-Forwarded-Proto']时,我得到了文字“$ scheme”,而不是“http”或“https”。 我已经尝试了proxy_set_header和passenger_set_header并有相同的结果。

Nginx无法在https中加载css / js / images – 阻止加载混合活动内容

我使用Nginx 1.8.0运行ubuntu 14.04。 在https中打开网页时,由于css / js / images无法加载,页面显示为中断。 我得到这个错误“ Blocked loading mixed active content ” 这是我的nginx.conf : https : //github.com/adithyakhamithkar/ansible/blob/master/roles/nginx/templates/nginx.j2 这是我的虚拟主机文件: https : //github.com/adithyakhamithkar/ansible/blob/master/roles/nginx/templates/virtualhost_ssl.j2 请有人请指导我如何解决这个问题。

多个静态文件目录,单个PHP FPM服务器

我有两个目录,我需要提供静态资产: /srv/web :包含图片,JavaScript,HTML等的静态资源 /srv/php :dynamicPHP脚本以及一些静态资产。 我正在使用NGINX并configuration它,如下所示: server { listen 80; server_name _; # root /; index index.php index.html index.htm; try_files /srv/web/$uri /srv/php/$uri =404; location ~ \.php$ { root /srv/php; try_files $uri =404; fastcgi_pass unix:/var/run/php5-fpm.sock; fastcgi_index index.php; # fastcgi_param SCRIPT_FILENAME /srv/php$fastcgi_script_name; include fastcgi_params; } } 我在Ubuntu 14.04上,PHP FPM包版本是5.5.9,NGINX包版本是1.4.6。 这里的简单目标是首先为/srv/web提供静态文件,如果失败/srv/php ,则返回404.所有以\.php$结尾的\.php$将通过Unix套接字从PHP FPM请求,这是工作。 我目前遇到的问题是, server上的index指令没有按计划运行。 我在/srv/web有一个index.html文件,当我这样做 curl -is […]

Nginx打开DDOS文件太多了

我现在有一个ddos的问题。 我的networking服务器是在一个反向代理(cloudflare)后面,我知道不应该依靠他们的免费计划。 Cloudflare处于攻击模式下,导致访问者完成浏览器检查。 通过直接IP访问站点将只redirect他们。 我正在使用nginx的请求限制function,但这似乎没有帮助,因为攻击者正在使用一个巨大的代理列表。 请求中没有巨大的红旗,所以我不确定WAF是否有帮助。 不过有趣的是,当我查看错误日志时, 我看到什么导致DOS是以下错误(该文件完全填充) 2015/09/03 19:22:12 [crit] 3427#0: accept4() failed (24: Too many open files) 我现在认为他们正在通过直接的IP攻击,但redirect不足以阻止他们使我达到我的开放文件的限制。 有什么我可以做,阻止这个? 谢谢 编辑:我不相信他们直接攻击IP,因为我在网站上运行的软件仍然检测到攻击者造成的大量的stream量。 编辑:这是他的垃圾邮件的交通的几行。 cloudflare的开箱即用WAF会阻止这个吗? 87.135.112.116 – – [05/Sep/2015:14:47:53 +0200] "GET /index.php HTTP/1.0" 200 15767 "-" "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; […]

Nginx仅在特定位置validation客户端证书

我们使用Nginx作为我们Web应用程序服务器的反向代理。 Nginx处理我们的SSL等,但否则只是作为一个反向代理。 我们希望为/jsonrpc请求提供有效的客户端证书,但不要求在其他地方使用它们。 我们find的最好的方法是 server { listen *:443 ssl; ssl on; ssl_certificate /etc/nginx/server.crt; ssl_certificate_key /etc/nginx/server.key; ssl_client_certificate /etc/nginx/client-ca.crt; ssl_verify_client optional; location /jsonrpc { if ($ssl_client_verify != "SUCCESS") { return 403; } proxy_pass http://localhost:8282/jsonrpc-api; proxy_read_timeout 90; proxy_redirect http://localhost/ $scheme://$host:$server_port/; } } 这对大多数浏览器来说都是正常的,但是一些浏览器(如Safari和Chrome上的Android)最终会提示用户提供一个客户端证书,无论他们去哪里。 除了我们的/jsonrpc位置,我们如何让Nginx接受但并不真正关心客户端证书?

nginx websocket代理如何工作?

我想知道nginx如何处理吨活跃websocket连接? 有许多限制,如打开文件的数量,IP < – >(IP,端口)等之间的最大TCP连接数为65k。 当我使用nginx作为反向代理,并且在websocket的上游有5个节点时,nginx和每个节点之间是否有高达65k的活动TCP连接? 如果我有超过300K的活动客户端服务的nginx,当然。 或者nginx websocket代理以另一种方式工作? 还有我的另一个问题:我应该调整哪些参数(限制)来处理这么多的连接?

我如何在Ubuntu上安装特定版本的Nginx?

我有一个Ubuntu 14.04的networking服务器,我想安装一个特定的主要版本的Nginx。 这意味着如果我安装Nginx 1.8,我不希望Ubuntu在任何时候升级到1.9。 但是,小版本升级是可以的(1.8.1到1.8.2)。 我find了PPA的nginx/stable ,但不是有人维护一个存储库,我可以select要安装的实际版本? 这与Ubuntu官方包类似,但只是一个较新的主要版本。 为了保持稳定的环境,我认为这是必不可less的要求:(a)我可以保证一个特定的版本;(b)关键软件不会突然跳过一个主要版本,从而由于例如不兼容与configuration文件。

git提交后,Nginx服务器旧的静态文件

我使用Nginx来提供静态文件(同时也用作我的NodeJS express RestAPI的反向代理)。 问题是当我推送一个新的git提交到服务器,用户仍然会得到旧的(最新版本)文件。 目前的解决方法是用户在浏览器中清除caching。 这可能是什么原因? 我猜这是一些服务器端cachingconfiguration错误? 看下面我的nginxconfiguration(基本+包括)。 如下所示,静态文件(.html,.js,.css)驻留在/ var / www / frontend ## # 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; listen 80; server_name **REMOVED_FOR_PRIVACY_REASONS**; proxy_cache_valid 404 1m; location / { root /var/www/frontend; index […]

我如何说服Nginxredirect除/robots.txt之外的所有请求?

我正在使用Nginx,并将一些旧的域名指向新的站点。 在这个configuration的第一个块工作正常,我需要old.domain行为时,redirect到new.domain 。 在第二个块中,我试图将任何除了 /robots.txt 之外的oldmediaserver.domain请求转发到new.domain的主页。 在当前状态下,每个请求都会redirect,包括/robots.txt – 我不知道为什么。 (之所以这样做,是因为Google从旧域名中search了一些东西,我试图通过网站pipe理员工具从search结果中删除它 – 这可能行不通,但这不是我在这里要求的帮助! )。 # Old site to new site config server { listen 80; listen [::]:80; server_name old.domain www.old.domain; rewrite ^ $scheme://www.new.domain$request_uri permanent; } # Media server Redirect and Robots directive server { listen 80; listen [::]:80; server_name oldmediaserver.domain www.oldmediaserver.domain; location / { rewrite / […]

Nginx – 允许没有主机头的请求

当Nginx收到一个缺lessHost头部的请求时,它会以400的响应拒绝它。 正如它应该。 有没有办法解决? 有一个硬件需要能够对我的Nginxnetworking服务器进行REST调用,但是这个设备没有发送一个主机头。 我无能为力,我无法控制这个装置的内部运作。 这将是唯一的设备与我的networking服务器通信,缺乏一个主机头,并将始终连接到相同的位置。 服务器正在使用基于名称的虚拟主机。 我已经尝试使用headers-more-nginx模块重build我的服务器,因为我相信它可以在处理之前将请求头添加到请求中。 我将下面一行添加到此虚拟主机的服务器块: more_set_input_headers "Host: device.myserver.com"; 但是请求仍然被400拒绝。 编辑: 我忘了提及这些设备目前能够向lighttpd 1.4.28 Web服务器发出请求。 我试图让他们在Nginx上工作。 我在lighttpdconfiguration文件里找不到任何特别的东西,应该让这个工作起作用,好像lighttpd就不需要这个头文件。 编辑2: 来自tcpdump的结果(我把我不应该放在网上的东西写出来): POST http://XXX.XXX.XXX.com/index/get-next-command HTTP/1.1 Content-Type: application/x-www-form-urlencoded Connection: keep-alive Content-Length: 62 user=XXX&pass=XXX&v=0103HTTP/1.1 200 OK X-Powered-By: PHP/5.3.10-1ubuntu3.21 Set-Cookie: PHPSESSID=XXX; path=/ Set-Cookie: username=XXX; path=/ Set-Cookie: password=XXX; path=/ Expires: Thu, 19 Nov 1981 08:52:00 GMT Cache-Control: no-store, no-cache, must-revalidate, […]