Articles of nginx

nginx和varnish for caching forcing ssl

我正在做我的作业,从apache无线caching到nginxcaching,可能通过清漆… … 在阅读了各种博客,文章,服务器故障问题等之后,我知道清漆不能使用ssl,并且该清漆可能比nginx更好地实现dynamic内容的caching。 但是我对于理解nginxcaching是如何工作以及nginx + varnish如何在需要ssl的时候可以一起玩的有点困惑。 下面是怎么实现的,用nginx + varnish还是用nginxcaching? 一些由自定义PHP引擎驱动的url:ie example.com/this-page由example.com/index.php?p=this-page提供 一些url是由wordpress驱动的:ie example.com/blog/this-article由wordpress通过example.com/blog/index.php?p=this-article处理 应该在任何地方强制ssl:即http://example.com/ *redirect到https://example.com/ * www应该redirect到顶级域:即http://www.example.com/ *redirect到https://example.com/ * 所有这些服务caching版本,如果存在的话(如果我明白 – caching是基于时间的,所以如果我更新该页面,我需要调用PURGE清漆路线和手动删除文件,如果Nginx路线)

Nginx和Lua:黑客,优化和观察

在这篇文章之后,我使用Lua来增加nginx的灵活性,并减lessweb栈的负载。我很想知道人们如何使用Lua来增强nginx的function。 有没有什么显着的黑客,优化和观察使用Lua ? 人们曾经用Nginx来发现function的文章,否则在Web服务器或反向代理中会变得复杂/不可能? 编辑: 链接: http://thechangelog.com/post/3249294699/super-nginx-killer-build-of-nginx-build-for-luajit-plus http://skillsmatter.com/podcast/home/scripting-nginx-with-lua/te-4729 http://devblog.mixlr.com/2012/06/26/how-we-use-nginx-lua-and-redis-to-beta-ify-mixlr/

当响应位置的域变化时,使用nginx的proxy_redirect

我正在使用SoundCloud的API制作networking应用程序。 请求MP3stream传输涉及两个请求。 我会举一个例子。 首先: http://api.soundcloud.com/tracks/59815100/stream 这返回一个302与临时链接到实际的MP3(每次不同),例如: http://ec-media.soundcloud.com/xYZk0lr2TeQf.128.mp3?ff61182e3c2ecefa438cd02102d0e385713f0c1faf3b0339595667fd0907ea1074840971e6330e82d1d6e15dd660317b237a59b15dd687c7c4215ca64124f80381e8bb3cb5&AWSAccessKeyId=AKIAJ4IAZE5EOI7PA7VQ&Expires=1347621419&Signature=Usd%2BqsuO9wGyn5%2BrFjIQDSrZVRY%3D 我遇到的问题是我试图通过JavaScript的XMLHTTPRequest加载MP3,出于安全原因,浏览器无法关注302,因为ec-media.soundcloud.com没有设置标题,说它对浏览器是安全的通过XMLHTTPRequest访问。 因此,我没有使用SoundCloud URL,而是在nginx中设置了两个位置,所以浏览器只与我的应用程序所在的服务器交互,并且没有出现安全错误: location /soundcloud/tracks/ { # rewrite URL to match api.soundcloud.com's URL structure rewrite \/soundcloud\/tracks\/(\d*) /tracks/$1/stream break; proxy_set_header Host api.soundcloud.com; proxy_pass http://api.soundcloud.com; # the 302 will redirect to /soundcloud/media instead of the original domain proxy_redirect http://ec-media.soundcloud.com /soundcloud/media; } location /soundcloud/media/ { rewrite \/soundcloud\/media\/(.*) /$1 break; proxy_set_header Host […]

使用Varnish作为负载平衡器

Varnish已经支持负载均衡HTTP 1.1和Web Socket请求,例如https://www.varnish-cache.org/trac/wiki/LoadBalancing 由于我们已经使用Varnish进行caching,如果我们在Varnish之前添加nginx或ha proxy来进行负载平衡,是否有任何好处,还是应该使用Varnish进行负载平衡? 似乎这种做法相当less见,为什么?

使用Nginx / Varnish / Apachelogging客户端IP

我有Nginx监听端口443作为一个SSL终结者,并代理到同一台服务器上的Varnish未encryption的stream量。 Varnish 3正在处理此stream量,并且stream量直接通过端口80进入。所有stream量都被传递(未encryption)到集群中其他服务器上的Apache实例。 Apache实例使用mod_rpaf将所logging的客户端IPreplace为X-Forwarded-For标头的内容。 我的问题是,如果stream量通过Nginx传递,而'正确的'客户端IP正在loginVarnishNCSA日志,看起来好像Varnish(可以理解)用127.0.0.1下游replaceNginx的X-Forwarded-For头,这是用Apachelogging的。 有没有一个简单的方法来停止Varnish重写X-Forwarded-For如果它已经填充?

通过nginx服务fastcgi

我有一个“hello world”fastcgi在127.0.0.1:9000上运行,并希望通过nginx提供。 我添加了以下几行到nginx.conf http块: server { listen public.ip.address.here:80; server_name $host; location / { include fastcgi_params; fastcgi_pass 127.0.0.1:9000; } } 然而,而不是得到fastcgi的输出,我只得到一个502坏网关响应。 [error] 1924#0: *1 upstream prematurely closed FastCGI stdout while reading response header from upstream, client: myIP, server: $host, request: "GET / HTTP/1.1", upstream: "fastcgi://127.0.0.1:9000", host: "public.ip.address.here"

403在nginx上禁止

我试图用nginx创build一个localhost服务器。 我在我的页面上收到了一个403 Forbidden 。 这是我的nginx错误日志: 2013/03/30 20:39:18 [error] 12161#0: *1 directory index of "/home/mike/Projects/606club/" is forbidden, client: 127.0.0.1, server: localhost, request: "GET /606club/ HTTP/1.1", host: "localhost" 我的nginx.conf文件: server { listen 80; server_name localhost; #for .html sites location / { root /home/mike/Projects; index index.html index.htm; } #for .php sites location ~ \.php$ { root /home/mike/Projects; fastcgi_pass […]

nginx try_files处理两次,如果错误后备设置失败

我有一个位置块设置来捕获所有文件请求,并将它们发送到PHP-FPM : location / { try_files $uri /routing.php?$args; fastcgi_pass unix:/opt/local/var/run/php54/php-fpm-www.sock; include /documents/projects/intahwebz/intahwebz/conf/fastcgi.conf; } 这可以正常工作,并正确地将请求传递给PHP-FPM ,或者将请求的确切的现有php文件或设置为要运行的脚本的routing.php 。 我试图添加一个错误页面,以便如果路由文件被删除或不可用,将显示错误页面,而不是Nginx的默认错误页面: location / { try_files $uri /routing.php?$args /50x_static.html; fastcgi_pass unix:/opt/local/var/run/php54/php-fpm-www.sock; include /documents/projects/intahwebz/intahwebz/conf/fastcgi.conf; } 这将停止正在提供的routing.php文件,而是显示50x_static.html页面。 请求现有的PHP文件仍然工作,即去URL /dynamic.php 我意识到try_files命令中的最后一个参数有点神奇: 在没有find文件的情况下,调用到最后一个参数的内部redirect。 请注意,只有最后一个参数会导致内部redirect,前者只是设置内部URI指针。 最后一个参数是回退URI并且必须存在,否则会引发内部错误。 在调查为什么error_page破坏了configuration的时候,我意识到对于工作的configuration(没有静态错误页面),当试图获取根URL“/”时,根据Nginx重写日志,Nginx确实似乎匹配请求两次。 “: "^/proxy/(\d+)/(\w+)/(.+)\.(gif|png|jpg|jpeg|GIF|PNG|JPG|JPEG)$" does not match "/", client: 127.0.0.1, server: basereality.com, request: "GET / HTTP/1.1", host: "basereality.test" "^/proxy/(\d+)/(.+)\.(gif|png|jpg|jpeg|GIF|PNG|JPG|JPEG)$" does […]

PHP-FPM停止响应并死亡

我在1GB的单核VPS上运行Nginx 1.5.1和PHP-FPM(PHP 5.3.26)的Drupal 6,SSD存储上有3GB的交换空间。 我刚刚从共享主机切换到这个非托pipe的VPS,因为我的网站变得太重了,所以我仍然在学习绳索。 我有很高的stream量,我没有真正注意到,但谷歌Adsense通常每天接近30K页面浏览量。 我通常有50到80个经过身份validation的用户login,另外还有几百个匿名用户在任何特定时间点击Boost静态HTMLcaching。 我遇到的问题是PHP-FPM经常停止响应,导致Nginx 502或504错误。 我发誓,我已经阅读了互联网上关于这个问题的每一页,这似乎相当普遍,我已经尝试了无数的configuration组合,我找不到一个好的解决scheme。 重新启动Nginx和PHP-FPM后,网站运行得非常快,然后没有任何警告就停止响应。 当浏览器在服务器上等待时,我得到一个白色的屏幕,大约30秒到一分钟后,它会抛出一个Nginx的502或504错误。 有时运行2分钟,有时5分钟,有时5小时,但总是挂起来。 当我发现服务器处于这种状态时,仍然有足够的空闲内存(> 500MB或更多)并且没有主要的CPU使用,控制和工人PHP-FPM进程仍然存在,并且服务器仍然可以通过SSH进行ping命令和使用。 通过初始化脚本重新载入PHP-FPM会再次激活它。 hangups似乎不符合stream量,因为我在一个没有stream量的开发VPS上testing这个configuration时一直观察到这种行为。 我一直在不断调整设置,但我不能确定地消除这个问题。 我将Nginx的工作者设置为1.在PHP-FPMconfiguration中,我尝试了所有三个进程pipe理器。 “dynamic”绝对是最不可靠的,只有几分钟后才会持续挂断。 “静态”也是不可靠和不可预测的。 最less的马车已经“非常需要”了,但是即使这样也会让我失望,有时甚至会在12到24小时之后。 但是我不能离开服务器,因为PHP-FPM死了,永远不会自动返回。 我试着将pm.max_children的值从3调整到50,并没有太大的差别,但是我现在是10。 我也设置pm.max_requests从30到无限的任何地方,似乎没有什么区别。 我也一直在使用APC和Rediscaching来从数据库中取出一些负载,但是在使用和不使用这些机制的情况下都存在PHP-FPM问题。 根据日志,PHP-FPM进程不是用SIGSEGV或SIGBUS退出,而是用SIGTERM。 我得到了很多行: WARNING: [pool www] child 3739, script '/var/www/drupal6/index.php' (request: "GET /index.php") execution timed out (38.739494 sec), terminating 和: WARNING: [pool www] child 3738 exited on signal 15 (SIGTERM) […]

如果使用Nginx,是否使用Elastic Beanstalk?

AWS Elastic Beanstalk仍然不支持PHP,Python或Ruby的开箱即用的Nginx。 无论多么奇怪,我想知道是否值得将现有PHP Web应用程序configuration为Elastic Beanstalk应用程序的麻烦。 各种各样的黑客是否像他们看起来那么微不足道? 我可能期望什么额外的障碍?