Articles of nginx

如何组织数以百万计的静态文件在网上进行有效的服务?

我想创build一个服务,以服务数十万个较小的文件(从5kb到500kb,大部分在10-100kb左右)。 把它想象成一种gravatar.com,它可以在https://secure.gravatar.com/avatar/1545f91437e2576b910dbd1023a44756这些URL上提供这些小的头像图片 我想使用没有任何ID或散列的描述性URL,例如http://www.server.com/This-is-my-file.ext ,没有重复的文件名。 什么是最有效的方式来服务和组织的文件没有太多的开销? 只要将所有内容放在一个目录中并让nginx提供这些文件,就会在一定数量的文件(取决于文件系统)后变慢。 一个想法是基于文件名的第一个字符将文件保存在一个简单的目录结构中,所以这个例子将在T / H / This-is-my-file.ext中用nginxconfiguration中的一个简单的重写规则。 这会导致分配到不同目录的分配非常不均匀。 使用来自允许的值说,文件名的MD5哈希将导致良好的分布,但需要更多的计算能力… 我想这听起来像是一个关键的价值存储的完美的用例,但不是只有文件系统和nginx可以保持简单吗?

nginxredirect/2013/04/test.html到/testing – 不工作

我一直在精神上这个。 如何将/2013/04/test.html这样的urlredirect到/test in nginx? 我试过这个:但不起作用: server { location /2013/05/test.html { return 301 http://$server_name/test; } } 我已经执行了一些testing – 出于某种原因,在configuration行的位置部分中没有.html扩展名的任何url都将正确redirect,但只要将.html放置在位置kaboom中,就会停止工作。 任何想法,为什么这是? 谢谢!

Nginx不尊重必须重新validation

我想使用nginx作为caching逆向代理。 我也有一个特殊的要求,我认为可以用nginx来完成。 我使用Amazon S3作为原始服务器,并使用已签名的URL来保护内容。 因此,每个用户都会获得一段时间后过期的唯一url。 即使每个用户都有一个唯一的URL,为了让nginxcaching内容,我将caching键定义为仅包含请求文件名(参见下面的configuration)。 那到目前为止工作很好。 问题是,如果请求的URL将是无效的,因为查询string中的签名太旧或无效,服务器无论如何传递文件。 因为它被caching。 我确认了最初的请求必须包含有效的签名。 如果用户请求中的signture无效,nginx无法从服务器上获取(当然)。 现在我想要的是在每个请求上重新查找文件。 此重新查找应该与用户指定的URL一起进行。 如果请求成功,则应该传递caching的文件。 这正是使用Cache-control: must-revalidate应该完成的行为Cache-control: must-revalidate 所以我在我的原始服务器(amazon s3)上configuration了这个头文件。 然后我意识到,nginx并没有相应的行为。 所以文件直接从caching中传递而不需要与原始服务器进行validation。 因此,不好的签名不被识别,用户可以下载。 问题1:在这种情况下,有没有办法让nginx获得必须重新validation的头文件? 这是我的configuration文件 proxy_cache_path /home/sbgag/cache keys_zone=MYZONE:10m inactive=365d max_size=10g; server { listen 80; server_name test.mydomain.com; location / { proxy_pass http://s3-eu-west-1.amazonaws.com; proxy_set_header Host s3-eu-west-1.amazonaws.com; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_cache_key "$request_filename"; more_set_headers "X-My-Proxy-Cache-Key $request_filename"; more_set_headers […]

云端由Nginx(代理S3)支持,随机丢失已经caching的项目?

我希望以Cloudfront作为CDN前端从S3存储桶提供图像,为此我尝试了以下操作: 我想达到的效果 ( 尝试2 ) – ( 随机丢失云端caching ) 我有以下设置来提供图像:( Cloudfront – > Nginx – > S3 ) <<<<<<<<样品S3标题>>>>>>>>>> <<<<<<<<示例Nginx – > S3头文件(已添加caching控制 )>>>>>>>>>> <<<<<<<<示例Cloudfront – > Nginx – > S3头文件>>>>>>>>>> 我目前正在使用( 尝试1 ) – ( 每次都按照预期点击云端 ) ** Cloudfront设置**: 尊重GET参数来支持URL( http://cdn.example.com/abc.jpg?v=1 ) 高速cachingTTL设置为157680000 ( 高速caching控制回退) 我在Attemp-2上搞了些什么? ( Cloudfront随机丢失 ) Url( http://cdn.example.com/abc.jpg )&Url( http://cdn.example.com/abc.jpg?v=1 )都会有相同的ETag […]

针对混合tcp,udp和http服务的反向代理

我正在构build一个架构,将托pipe各种服务,可以单独监听不同数量的可能是混合协议的端口。 我想将这些服务映射到唯一的子域,并将外部端口的代理入站请求反向到相应的内部端口。 目前我正在使用安装了TCP模块的Nginx。 这给了我http和tcp的支持。 不过我刚刚发现Nginx不支持UDP。 这似乎也许与我可以支持UDP的自定义模块,但这是一个单独的问题。 我也有使用Nginx模块将多个TCP服务映射到子域的问题。 我希望有另一个代理解决scheme,可能更适合这个。 或者是工具的组合。 编辑:我发现唯一可能适合这个angular色是: http : //freecode.com/projects/proxymini http://aluigi.altervista.org/mytoolz.htm#proxymini 但我不能告诉它的unix友好或仅窗口,可能不是一个反向代理

Debian + nginx / apache的低吞吐量

在相同的局域网/广域网上,我有一台运行IIS 7.5的Windows Server 2012服务器和一台运行Nginx 1.4.5的Debian(wheezy)服务器。 两台服务器都连接到相同的LAN / WAN。 当我从debian服务器上下载一个10MB的文件时, curl报告的平均下载速度为1157k 。 使用相同的文件,在相同的networking上,但在Windows服务器上,Curl报告3588k的平均下载速度。 多次运行脚本显示,debian服务器的平均下载速度有很大的变化,有时我只有40万 ,而Windows服务器是相当稳定的。 在局域网而不是广域网上testing给了我更好的性能,但Windows服务器在那里也performance得更好。 Windows服务器正在生产,并有一定的负载,而debian服务器没有负载比我的testing。 客户端,如果我使用wireshark捕获TCPstream量,我不太熟悉tcp捕获,但是我发现debian的TCP窗口大小比windows服务器小。 Debian: Window size value: 913 Calculated window size: 14608 Window size scaling factor: 16 Windows: Window size value: 256 Calculated window size: 65536 Window size scaling factor: 256 我试过Apache而不是Nginx,它没有改变任何东西。 我已经通过互联网尝试了不同的“Linux tcp tuning”指南,没有任何明显的影响。 两台服务器的Ping时间相同。 没有涉及SSL / TLS。 我不知道该从哪里出发。 任何人有一些build议来调查或解决这个问题?

nginx返回301 /redirect

在所有'在nginxredirect'的问题中,我找不到如何使用regexpsredirect(使用返回301和更好的没有ifs)。 我有一个链接到我的网站,我想删除参数结束: domain.com/article/some-sluggish-link/?report=1 #number at end 正则expression式来find这个: \?report=\d*$ 为此,我想301redirect到: domain.com/article/some-sluggish-link/ 我nginx.conf我有3个redirect: server { listen 80; server_name subdomain.example.com.; #just one subdomain } server { listen 80; server_name *.example.com; return 301 http://example.com$request_uri; } server { listen 80; server_name example.com; } 它的工作; 它将所有www。,ww。,aaa。,301以及除1个以外的每个子域redirect到main domain.com 我会很感激任何帮助干杯! 编辑25/03/2015 我的conf文件中已经有“location /”了: location / { uwsgi_pass unix://opt/run/ps2.sock; include uwsgi_params; } redirect到一些Django的应用程序。 应用“if”条款后,它给我无限循环! […]

Nginx HttpRedis2Module只获取值

我试图设置Nginxcaching与多个服务器使用共享的Redis实例存储。 我正在使用HttpSRCacheModule ,以及HttpRedis2Module 。 在示例configuration中 ,HttpRedisModule和HttpRedis2Module都在使用中。 HttpRedis2Module用于写入Redis,而HttpRedisModule用于读取。 原因是HttpRedis2Module只返回来自Redis的原始数据,而不是我试图访问的密钥的值 。 为了说明,Redis Wire协议的一半都包含在这个模块的输出中,这个模块完全打破了Nginx的用法来检索值。 这对我来说没有多大意义。 我不知道为什么这个扩展将以防止它被使用的方式构build…所以我想我错过了一些东西。 是否可以使用HttpRedis2Module从Redis读取密钥并将其值返回给HTTP客户端? 如果你想知道为什么我不使用像示例configuration中使用的HttpRedisModule,那是我无法得到它为Nginx 1.6.0编译。 这似乎是某种兼容性问题。 其他人build议使用OpenResty包 ,但是我暂时避免使用这个路由,因为你似乎无法用你自己的Nginxconfiguration参数来构buildOpenResty。 随着所有configuration文件的位置和不变,我有很多自动化和脚本,需要更新。 最后我可能会用OpenResty,但是我想首先用HttpRedis2Module回答从Redis读取的问题。 任何build议将是伟大的。 谢谢!

使用AWS Elastic Beanstalk运行Puma&Nginx的Rails应用程序502

我已经能够成功地让我的应用程序运行在与铁路客运的Beanstalk,但是我没有与彪马运气。 每当我部署到Puma堆栈时,我得到502错误,我的日志文件表明它找不到袜子文件: 2014/05/15 21:00:15 [crit] 1684#0: *4 connect() to unix:///var/run/puma/my_app.sock failed (2: No such file or directory) while connecting to upstream, client: 10.184.156.117, server: _, request: "GET / HTTP/1.1", upstream: "http://unix:///var/run/puma/my_app.sock:/", host: "app-env-89spnxpcai.elasticbeanstalk.com" 我的应用程序是使用Ruby ruby​​ 2.0.0p451&Rails 4.1.1构build的 我的.ebextensionsconfiguration看起来像这样 packages: yum: git: [] commands: add_bundle_exec: test: test ! -f /opt/elasticbeanstalk/support/.post-provisioning-complete cwd: /opt/elasticbeanstalk/hooks/appdeploy/pre command: perl -pi -e […]

UWSGI不创build我的套接字

所以,我得到一个错误,因为我的.sock文件不是由uwsgi创build的。 我也与stream浪者一起运行一个VB。 我的uwsgi.ini [uwsgi] master = true pidfile = /tmp/uwsgi-%n.pid workers = 12 enable-threads = true uid = www-data gid = www-data socket = /tmp/uwsgi-my-site.sock chmod-socket = 777 virtualenv = /var/sites/%n/env single-interpreter = true chdir = /var/sites/%n wsgi-file = app/main.py logto = /vagrant/my-site/log/uwsgi.log #stats = 127.0.0.1:1717 和我的nginx.conf server { listen 80; server_name my-site.com; access_log /var/sites/my-site/log/nginx_access.log; […]