Articles of nginx

使用nginx使用单个端口处理http和https请求

我想知道如果nginx能够处理http和https请求在同一个端口 。 [*] 这就是我想要做的。 我正在运行处理http请求的web服务器(lighttpd),以及一个通过https服务文档树的特定部分的C程序。 这两个进程在同一台服务器上运行。 在防火墙级别, 我只能有一个端口将stream量转发到此服务器 。 所以我想要做的就是在这个服务器上设置nginx,以便它监听单个端口上的请求,然后: A)redirect所有http://myhost.com/ *请求,以便它们转到localhost:8080(lighttpd正在侦听) B)如果用户请求以https:// myhost.com/app开头的URL,则将该请求发送到localhost:8008(C程序)。 请注意,在这种情况下,远程浏览器和nginx之间的stream量必须encryption。 你认为这可能吗? 如果是这样,怎么办? 我知道如何使用两个不同的端口来做到这一点。 我面临的挑战是只用一个端口(不幸的是,我无法控制这个特定环境的防火墙configuration,所以这是我无法避免的限制)。 使用像通过ssh的反向端口技术绕过防火墙的技术也将无法正常工作,因为这应该适用于远程用户只有一个Web浏览器和互联网链接。 如果这超出了nginx的能力,你是否知道任何其他能满足这个要求的产品? (到目前为止,我已经用lighttpd和英镑设置这个不成功)。 我也更喜欢避免Apache(尽pipe我愿意使用它,如果它是唯一可能的select)。 在此先感谢,亚历克斯 [*]要清楚,我正在谈论通过同一个端口处理encryption和未encryption的HTTP连接。 encryption是通过SSL还是TLS完成并不重要。

nginx:转储HTTP请求进行debugging

Ubuntu 10.04.2 nginx 0.7.65 我看到一些奇怪的HTTP请求来到我的nginx服务器。 为了更好地理解正在发生的事情,我想为这样的查询转储整个HTTP请求数据。 (即转储所有的请求头和身体的地方,我可以阅读它们。) 我可以用nginx做这个吗? 另外,是否有一些HTTP服务器,允许我这样做的开箱即可,我可以通过nginx的方式代理这些请求? 更新:请注意,这个盒子有一堆正常的stream量,我想避免在低级别(比如使用tcpdump )捕获所有的stream量,然后过滤掉。 我认为在重写规则中首先过滤好stream量将会容易得多(幸运的是,在这种情况下,我可以很轻松地写出一个stream量),然后只处理虚假stream量。 而且我不想将伪造的stream量引导到另一个盒子,只是为了能够使用tcpdump捕获它。 更新2:为了给出更多的细节,伪请求在他们的GET查询中具有名称(说) foo的参数(参数的值可以不同)。 好的请求保证不会有这个参数。 如果我可以通过tcpdump或ngrep以某种方式进行过滤 – 没问题,我会使用这些。

Nginx – 如何将具有特定IP的用户redirect到特殊页面

我运行了一个相当大的图片库,有5个访问者通过每天下载整个网站使用networking复制器创build大量的stream量。 这些访问者似乎具有静态IP。 我想实现的是,一旦他们访问该网站,这5个IP就会被redirect到某个页面(这就解释了为什么他们的行为是有问题的)。 所有其他访问者应该能够正常浏览该网站。 服务器运行CentOS(5.8)和nginx(1.0.15)作为web服务器。 有什么办法可以通过你知道的nginx.conf中的条目来实现吗? 非常感谢您的提示和支持! 亲切的问候 – 亚历克斯

nginx发送空白200个响应

我正在configuration一个故障转移服务器,负责接受任何传入的请求,并回复空白的200响应。 这个想法是尽量减less回复时间,并确保我们不发送任何40倍或50倍。 我试过使用return 200; 对于Nginx中所需的位置,但我的监控系统(Pingdom)不喜欢响应,并认为服务器没有响应。 有没有更好的方法来做到这一点,当然在服务器上的开销最小?

nginx:如何防止一个完全命名的SSL服务器块充当所有SSL的catchall

我有一个Web服务器与许多虚拟服务器。 其中只有一个是SSL。 问题是,因为没有监听SSL的Catchall服务器块,所以对其他站点的任何https请求都由1个SSL块提供服务。 本质上,我的configuration如下所示: # the catch all server { listen 80 default; # I could add this, but since I have no default cert, I cannot enable SSL, # and this listen ends up doing nothing (apparently). # listen 443; server_name _; # … } # some server server { listen 80; server_name server1.com; […]

这是否certificate了networking带宽瓶颈?

我错误地认为,我的内部ABtesting意味着我的服务器可以处理1k并发@ 3k点击每秒。 目前我的理论是networking是瓶颈。 服务器无法足够快地发送足够的数据。 来自blitz.io的1k并发性外部testing显示我的命中上限为180,页面花费的时间越来越长,因为服务器每秒只能返回180。 我已经从nginx提供了一个空白文件,并对其进行了修改:它以1:1的并发性进行扩展。 现在为了排除IO / memcached瓶颈(nginx通常从memcached中提取),我从文件系统提供了一个静态版本的caching页面。 结果与我原来的testing非常相似。 我被限制在大约180 RPS。 将HTML页面分成两半,使得RPS翻了一番,所以受到页面大小的限制。 如果我在本地服务器内部使用ApacheBench,那么在全页面和半页面上都能以高传输速率获得大约4k RPS的一致结果。 传输速率:收到62586.14 [千字节/秒] 如果我从外部服务器AB,我得到约180RPS – 与blitz.io结果相同。 我怎么知道这不是故意的节stream? 如果我从多个外部服务器进行基准testing,所有结果都变差,这导致我认为问题出在我的服务器出站stream量,而不是我的基准服务器/ blitz.io下载速度问题。 所以我回到我的结论,我的服务器无法发送足够快的数据。 我对吗? 还有其他方法来解释这些数据吗? 是解决scheme/优化设置多个服务器+负载均衡,每个可以每秒180次点击? 我很新的服务器优化,所以我会很感激任何确认解释这些数据。 出站stream量 以下是有关出站带宽的更多信息:networking图显示最大输出速率为16 Mb / s:每秒16兆比特。 听起来不怎么样。 由于有关节stream的build议,我研究了这个,发现林德有一个50mbps的帽子(我甚至没有接近击中,显然)。 我把它提高到100mbps。 由于linode限制了我的stream量,而我甚至没有打它,这是否意味着我的服务器确实应该能够输出高达100mbps,但受到其他一些内部瓶颈的限制? 我只是不明白这个规模的networking是如何工作的; 他们可以从硬盘上读取数据吗? networkingpipe道很大吗? 结论是 1:基于上述情况,我想我可以通过在多服务器端安装一个nginx负载平衡器,在每台服务器后面精确的180RPS的LB上增加180RPS。 2:如果林德有一个50 / 100mbit的限制,我根本没有打,我必须做一些事情来达到我的单个服务器设置的限制。 如果我可以在本地快速读取/传输数据,并且林德甚至有麻烦有一个50mbit / 100mbit上限,必须有一个内部的瓶颈,不能让我打这些帽子,我不知道如何检测。 正确? 我意识到这个问题现在是巨大而模糊的,但我不确定如何浓缩它。 任何input都赞赏我所做的任何结论。

提高Nginx请求/秒的技巧?

我正在构build一个分析包,项目需求说明我需要每天支持10亿次点击。 是的,“十亿” 换句话说,每秒不less于12000次点击持续,最好是有一定的破解空间。 我知道我需要多个服务器,但是我试图在“抛出更多的硬件”之前,在每个节点上获得最大的性能。 目前,我已经完成了点击跟踪部分,并进行了优化。 我几乎只是将请求直接保存到Redis中(以便以后使用Hadoop进行处理)。 该应用程序是Python / Django与网关gunicorn。 我的2GB Ubuntu 10.04 Rackspace服务器(不是生产机器)每秒可以处理大约1200个静态文件(使用Apache AB针对单个静态资产进行基准testing)。 为了比较,如果我用我的跟踪链接换出静态文件链接,我仍然每秒获得约600个请求 – 我认为这意味着我的跟踪器已经优化,因为它只比服务相同的静态资产慢2倍反复。 然而,当我以数百万次的点击为基准时,我注意到了一些事情 – 没有使用磁盘 – 这是预料之中的,因为我已经closures了所有的Nginx日志,而且我的自定义代码除了将请求详细信息保存到Redis之外什么也不做。 非固定的内存使用情况 – 据推测,由于Redis的内存pipe理,我的内存使用量将逐渐攀升,然后又回落,但从来没有成为我的瓶颈。 系统负载徘徊在2-4左右,甚至在我最重要的基准testing中,系统仍然响应,而且我仍然可以手动查看http://mysite.com/tracking/pixel ,但是我的(其他)服务器每次执行600次请求第二。 如果我进行一个简短的testing,比如说5万次点击(大概需要2米),那么我每秒钟可以获得稳定,可靠的600个请求。 如果我运行一个更长的testing(到目前为止尝试高达3.5米),我的r / s降低到大约250。 我的问题 – 一个。 它看起来像我最大的这台服务器呢? Nginx的性能堪比其他人所经历的1200 / s静态文件? 湾 对于这样的大容量应用程序是否有常见的nginx调优? 我有工作线程设置为64,gunicorn工作线程设置为8,但调整这些值似乎没有帮助或伤害我很多。 C。 有没有任何Linux级别的设置可能会限制我的传入连接? d。 什么可能导致我的性能在长时间运行的testing中降低到250r / s? 同样,在这些testing中,内存不是最大的,硬盘使用率是零。 在此先感谢,所有:) 编辑这里是我的nginxconfiguration – http://pastie.org/1450749 – 它主要是香草,脂肪明显削减。

nginx和memcached如何一起工作?

我们有一个在Glassfish应用服务器集群上运行的基于Java EE的Web应用程序。 传入stream量将主要是基于XML的RESTful请求,用于表示我们的应用程序资源,但是可能有5%的stream量是基于JSON或XHTML / CSS的表示forms。 我们现在正在研究负载均衡解决scheme,以便在集群中的Glassfish实例之间分配传入stream量。 我们也在研究如何使用memcached卸载集群,这是一个内存分布式哈希映射,其键是REST资源名(例如“/ user / bob”,“/ group / jazzlovers”),其值是相应的XML表示。 听起来很有前途的一种方法是一举两得,并使用轻量级,快速的nginx HTTP服务器/反向代理。 Nginx将通过首先在memcached中查找它的URI来处理每个传入的请求,以查看是否存在尚未到期的XML表示。 如果没有,nginx将请求发送到其中一个Glassfish实例。 nginx memcached模块在这个简短的介绍中有描述。 你对nginx和memcached的总体印象如何,用这种方式,你对他们有多开心? 你觉得哪些资源最有助于了解它们? 如果你尝试了他们,他们不适合你的目的,为什么不,你用什么? 注意:这是一个相关的问题 。 在我知道有关ServerFault之前,我在StackOverflow上询问了这个问题。 编辑:到目前为止所有的答案都相当有帮助,虽然没有直接的经验。 这个答案最终在StackOverflow上显示出来了,而且在nginx / memcached安装上也是非常看好的。

禁用nginx代理中的URL解码

当我浏览到此URL: http://localhost:8080/foo/%5B-%5D服务器( nc -l 8080 )按原样接收它: GET /foo/%5B-%5D HTTP/1.1 但是,当我通过nginx(1.1.19)代理这个应用程序: location /foo { proxy_pass http://localhost:8080/foo; } 通过nginx端口路由相同的请求被转发path解码: GET /foo/[-] HTTP/1.1 GETpath中的解码方括号导致目标服务器( HTTP状态400 – path中的非法字符… )中的错误在到达时未被转义。 有没有办法禁用URL解码或编码回来,以便目标服务器通过nginx路由时获得完全相同的path? 一些聪明的URL重写规则?

来自/etc/resolv.conf的Nginxparsing器地址

是否可以在/etc/resolv.conf设置nginx代理configuration中的resolver地址? 例如在docker或virtualenvironment中,它可能很有用。