Articles of nginx

你如何有条件地在Nginx虚拟主机中包含文件?

在下面的行中,我可能有一个特定于站点的configuration文件,其中包含该站点特有的其他fastcgi_params 。 如果这个文件存在,我想加载它。 server { listen 80 default; server_name _; root /path/www/$host; # Pass PHP scripts to php-fastcgi listening on port 9000 location ~ \.php { include fastcgi_params; fastcgi_pass 127.0.0.1:9000; if (-f /path/www/$host/nginx.conf) { include /path/www/$host/nginx.conf; } } } 但是,这不起作用,我得到的错误是: nginx:[emerg]“include”指令在这里是不允许的… 更新 我认为,而不是分离检查,我可以让包括检查我。 server { listen 80 default; server_name _; root /path/www/$host; # Pass PHP […]

如何通过单个端口处理encryption和未encryption的http连接

请看下面的图表。 替代文字http://i30.tinypic.com/8wk4tt.png 这个怎么工作? 当远程请求http:// myhost.com:8080/*时,请求应该被转发到监听回送接口的8008端口的http服务器。 这是简单的部分。 当远程用户请求http:// myhost.com:8080/specialurl … 充当应用程序级别网关的程序应该能够将连接升级到encryption会话( 不更改端口 ) 在与远程浏览器build立encryption会话之后,它应该将请求转发到C程序,该程序侦听回送接口的8000端口 我的问题是 : 你有没有在生产环境中部署这样的解决scheme? 如果你有… 你用什么产品作为应用程序网关? 你能提供一个configuration例子吗? 硬限制 : 我没有防火墙的控制权 ,通过它我可以获得外部stream量进入内部服务器的唯一端口是8080.端口号是无关紧要的,只是有一个端口在防火墙级别打开,转发传入stream量到内部服务器。 内部服务器必须运行Linux(目前正在运行Debian Lenny) 远程用户只需要使用当前的Web浏览器和Internet连接即可访问此服务器。 这意味着通过SSH的反向端口转发不是一个选项。 我需要一个经过生产testing的产品,并且可以很容易地部署。 我不打算开发自己的应用程序网关 (如果是这样的话,我想我会问在堆栈溢出这个问题,而不是在服务器故障问)。 软限制 : 我想避免将Apache作为应用程序网关(尽pipe如果这是唯一可能的select,我愿意这样做) 如果可能的话,应用程序网关应该是一个成熟的开源软件产品。 产品尝试到应用程序网关 (没有成功) nginx的 lighttpd的 磅 相关的RFC RFC2817(… 解释了如何使用HTTP / 1.1中的升级机制来通过现有的TCP连接启动传输层安全性(TLS),这使得不安全和安全的HTTPstream量可以共享相同的已知端口 …) RFC2818(… 描述了如何使用TLS来保护通过Internet的HTTP连接。目前的做法是将HTTP over SSL(TLS的前身)分层,通过使用不同的服务器端口来区分安全stream量和不安全stream量 。 ) 在此先感谢,亚历克斯

nginx + fastCGI + Django – 在发送到客户端的响应中获取数据损坏

我使用FastCGI在nginx后面运行Django。 我发现,在发送给客户端的一些响应中,随机数据损坏发生在响应中间(中间可能是几百字节左右)。 在这一点上,我已经缩小到nginx的FastCGI处理程序或Django的FastCGI处理程序(即可能是一个漏洞的错误),因为这个问题从来没有发生,当我以独立(即runserver )模式运行Django服务器。 它只发生在FastCGI模式。 其他有趣的趋势: 它往往发生在更大的反应。 当客户端第一次login时,会发送一大堆1MB的数据块同步到服务器数据库。 在第一次同步之后,响应要小得多(通常每次几KB)。 腐败似乎总是发生在一开始发送的1MB块上。 当客户端通过LAN连接到服务器(即低延迟,高带宽连接)时,更经常发生这种情况。 这使得我认为在nginx或flup中存在某种竞争条件,并且由于数据速率的提高而加剧。 现在,我不得不通过在响应头中添加一个额外的SHA1摘要来解决这个问题,并且让客户端拒绝头部与主体校验和不匹配的响应,但是这是一种可怕的解决scheme。 有没有其他人经历过这样的事情,或者有任何的指示,以确定是否是错误的flup或nginx,所以我可以提交适当的团队错误? 在此先感谢您的帮助。 注意:我也在lighttpd + FastCGI + Django中发布了一个类似的bug,在这之后: https : //stackoverflow.com/questions/3714489/lighttpd-fastcgi-django-truncated-response-sent-to-client-due-to – 尽pipe这不是一回事(截断与腐败),但它开始看起来像常见的罪魁祸首是flup / Django,而不是Web服务器.. 编辑:我也应该注意我的环境是什么: Mac mini上的OSX 10.6.6 Python 2.6.1(系统) Django 1.3(官方tarball) flup 1.0.2(来自python卵上的flup网站) nginx + ssl 1.0.0(来自Macports) 编辑:为了响应Jerzyk的评论,组装响应的代码path看起来像(编辑为简洁): # This returns an objc NSData object, which is an array.array # when […]

Nginx的代理caching – 如何检查它是否工作?

我已经build立了我的nginx.conf文件来使用我在网上find的教程中的代理caching。 但是,我想弄清楚如何检查它是否实际工作。 我读过的地方增加了add_header X-Cache-Status $upstream_cache_status; 到服务器部分的configuration文件应该添加一个caching头到一个响应,它将显示它是否来自caching(具有HIT,MISS或EXPIRED的值)。 但是,我想知道我在哪里可以实际查看此标题(及其值)以及如果这是正确的方式/如果有另一种方式。 一般来说,我对networking很陌生,所以很抱歉,如果这是一个简单的问题。 谢谢!

PHP5-FPM如何向nginx发送错误?

我一直在用php-fpm和nginx进行错误日志logging的实验,因为我在网上找不到任何好的解释。 大多数指南说,如果我想将php5-fpm的错误发送回nginx,我应该将catch_workers_output更改为yes 。 然而,在我的实验中,我发现即使在catch_workers_output设置为no ,nginx仍然能够正确logging错误。 这是我的虚拟主机configuration: server { server_name domain.com; return 301 http://www.domain.com$request_uri; access_log off; } server { listen 80; listen [::]:80; root /home/websites/domain.com; index index.php index.html index.htm; error_log /home/websites/logs/domain.com/error.log warn; access_log /home/websites/logs/domain.com/access.log; #switch on gzip gzip on; gzip_min_length 1100; gzip_buffers 10 32k; gzip_types text/plain application/x-javascript text/xml text/css; gzip_vary on; location / { try_files $uri […]

HAProxy URL重写404错误

当第一个文件丢失时,如何使HAProxy重写到不同的后端? 我需要的是errorloc但重写而不是redirect,所以客户端不知道redirect。 我们已经开发了一个Nginx的应用程序,这个应用程序既是负载均衡反向代理,也是静态文件的Web服务器。 应用程序基于Opa框架,该框架需要基于cookie的粘性会话(由NginX和HAproxy支持)。 我们遇到的应用程序function是dynamic内容生成。 它可以根据需要生成图像,但生成后会保存在磁盘上,并可以通过确定性path静态访问。 Nginx很容易解决这个问题 – 只有当文件丢失(还没有生成)时,它才会尝试读取本地文件并使用负载平衡的后端。 server { server_name wkaliszu.pl; location /thumb { root /path_on_disk/to_cached_content; expires 7d; # try to access already generated content try_files $uri @wkaliszu; } location / { # reverse proxy to the application […] } location @wkaliszu { # reverse proxy to the application […] } } 服务器已迁移,现在使用HAPproxy进行负载平衡,这不是Web服务器,并且不支持此function。 […]

我可以将所有目录请求别名到nginx中的单个文件吗?

我想弄清楚如何将所有请求发送到一个特定的目录,并在nginx中返回一个没有redirect的jsonstring。 例: curl -i http://example.com/api/call1/ 预期结果: HTTP/1.1 200 OK Accept-Ranges: bytes Content-Type: application/json Date: Fri, 13 Apr 2012 23:48:21 GMT Last-Modified: Fri, 13 Apr 2012 22:58:56 GMT Server: nginx X-UA-Compatible: IE=Edge,chrome=1 Content-Length: 38 Connection: keep-alive {"logout": true} 以下是我在我的nginx conf中的结果: location ~ ^/api/(.*)$ { index /api_logout.json; alias /path/to/file/api_logout.json; types { } default_type "application/json; charset=utf-8"; break; } […]

即使服务器仍处于活动状态,nginx proxy_pass最终会返回GATEWAY_TIMEOUT

我已经设置了一个nginx代理直通function,当nginx初始加载时工作正常,但最终(也许在一天左右?,不太确定在这一点上),代理直通的位置只返回一个504 GATEWAY_TIMEOUT响应。 奇怪的是,我已经设置了多个proxy_pass位置,并且随机发生什么事情,并保持什么状态。 这里是nginxconfiguration文件: server { listen 80; server_name example.com; access_log /var/log/nginx/access.log; error_log /var/log/nginx/error.log; root /srv/www/frontend/current/; location / { try_files $uri $uri/ /index.html; } # Block all svn access if ($request_uri ~* ^.*\.svn.*$) { return 404; } # Block all git access if ($request_uri ~* ^.*\.git.*$) { return 404; } location /nginx_status { stub_status on; […]

APIpipe理解决scheme

我目前正在build立一个API,并正在寻找一个工具来允许我监视(在一个GUI)和速率限制使用。 我遇到了一些企业解决scheme,包括: http://apigee.com/ http://mashery.com/ http://www.layer7tech.com/ http://www.3scale.net/ Apigee企业计划正是我正在寻找,但计划开始在$ 3000 /月,这是超出我的价格范围。 其他解决scheme都是太昂贵或不提供我正在寻找的解决scheme。 这使我看到了一些开源选项,包括: http://apiaxle.com/ https://code.google.com/p/varnish-apikey/wiki/UsageManual 清漆似乎是一个相当完整的解决scheme; 不过,我需要构build一个GUI来显示数据。 我最后的select将从头开始使用EventMachine和rubybuild立一个解决scheme。 任何build议?

Web服务器随机提供不同的虚拟主机

我们已经在Ubuntu Trusty上运行了nginx。 它通过https服务于多个网站,在一个IP地址上运行。 随机地,虽然它似乎与工作负载稍有关系,有时单个请求出现在错误的虚拟主机上。 这导致请求lustrum.thalia.nu由thalia.nu服务,反之亦然。 然后,这会产生令人讨厌的错误页面,因为用户突然终结于不同的网站。 当你按下F5时 ,用户再次结束原来的目标。 它似乎没有浏览器或操作系统相关。 已经确认在Firefox(Linux,Windows,Mac),Edge(Windows)和Chrome(Linux,Windows,Android)和Safari(iOS)上发生。 当系统处于负载状态时,问题似乎更频繁地发生,这表明某种竞争条件。 lustrum.thalia.nu server { server_name lustrum.thalia.nu; listen 443 ssl; ssl on; ssl_certificate /etc/nginx/certs/lustrum.thalia.nu.crt; ssl_certificate_key /etc/nginx/certs/lustrum.thalia.nu.key; add_header Strict-Transport-Security "max-age=63072000; preload"; root /var/www/thalia-lustrum/public_html; location / { index index.php; try_files $uri $uri/ /index.php?$args; } # Add trailing slash to */wp-admin requests. rewrite /wp-admin$ $scheme://$host$uri/ permanent; # Pass all […]