Articles of nginx

NGINX'全球'​​的位置

是否有可能为NGINX服务器创build一个“全球”位置? 我希望NGINX提供的每个站点都可以访问/ global /文件夹; 沿着 http { […stuff…] #Global path location /global/ { root /my/global/location/; } server { listen 127.0.0.1:80; server_name example.com; […standard config…] } server { listen 127.0.0.1:80; server_name example.org; […standard config…] } server { listen 127.0.0.1:80; server_name example.net; […standard config…] } } 并且可以访问http://example.com/global/ http://example.org/global/等全球位置的文件。 我可以做到这一点,如果我把全局位置块添加到每个server块,但这是烦人的,我想有全球定义,并能够从网站内访问它。 我可以在每个主机中使用include指令,但是每个主机仍然需要指定。 NGINX维基说,“位置”块只在server上下文中有效,但我不知道是否有重写技巧或类似的东西。

如何以编程方式只将特定的nginx服务器块设置为维护模式

我正在寻找解决scheme来自动化我们的应用程序的部署过程之一。 在开始部署时,我想以编程方式将指定的服务器设置为维护模式,最后在部署完成后,从nginx服务器中删除维护模式标志。 通过维护模式,我的意思是nginx应该以HTTP响应代码503响应所有的请求(可能的自定义页面)。 我知道如何设置服务器块与503代码(请参阅http://www.cyberciti.biz/faq/custom-nginx-maintenance-page-with-http503/ ),但问题是关于如何以编程方式并最有效地。 我脑海中有两种select: 选项1:在部署过程开始时,将维护文件写入文档根目录,并有条件地检查nginx服务器configuration中是否存在维护文件: server { if (-f $document_root/in_maintenance_mode) { return 503; } } 此方法包含一定的开销,因为检查每个请求的文件存在。 只有在加载nginxconfiguration文件时才能检查文件是否存在? 选项2:部署脚本用维护版本replace整个nginx服务器configuration文件,并在部署结束时将其交换回来。 如果使用此方法,我担心可能会覆盖维护configuration文件的其他自动化进程(如puppet)。

Nginx的:如何设置主机头到select的服务器(负载平衡)

我有一个作为负载平衡器的网站。 网站A. 我有其他网站,只能有一个域。 所以如果我只是redirect到他们说主机名称找不到。 所以如果我手动设置标题的东西,那么只有该网站显示。 我如何设置proxy_set_header Host xxxx到服务器地址select。 这样每个重新路由请求将有不同和适当的主机头。 如果我的其他2个网站可以基于url而不是主机标题,这将不会成为问题。 worker_processes 1; error_log logs/error.log; error_log logs/error.log notice; error_log logs/error.log info; error_log logs/error.log debug; pid logs/nginx.pid; events { worker_connections 1024; } http { upstream myapp1 { #server localhost:3333; server www.asd.com:80; } server { listen 80; location / { proxy_set_header Host $upstream_addr; // should become somehow www.asd.com […]

多数据中心Ansible负载均衡器模板

我将现有的多数据中心设置的pipe理迁移到Ansible,但我不确定什么是最好的build模方法,因为我是新手。 我有三个数据中心D1,D2和D3。 在每一个,相同的configuration重复相同的: 绑定到公共IP的nginx负载平衡器 (lb.D [n]) 两个应用程序服务器 (如[1-2] .D [n])仅从本地负载平衡器接收stream量 数据库服务器 (db.D [n])从这两个应用程序服务器读取的从属(只读) 数据库 。 我到目前为止所做的主机文件看起来像这样: # DC1 ———– [dc_1_webservers] 10.43.0.10 [dc_1_appservers] 10.43.0.20 10.43.0.21 [dc_1_dbservers] 10.43.0.30 [dc_1:children] dc_1_webservers dc_1_appservers dc_1_dbservers # DC2 ———– [dc_2_webservers] 10.43.10.10 [dc_2_appservers] 10.43.10.20 10.43.10.21 [dc_2_dbservers] 10.43.10.30 [dc_2:children] dc_2_webservers dc_2_appservers dc_2_dbservers # DC3 ———– [dc_3_webservers] 10.43.20.10 [dc_3_appservers] 10.43.20.20 10.43.20.21 [dc_3_dbservers] 10.43.20.30 [dc_3:children] […]

机架空间和centos的负载平衡器性能不佳

我负载testing负载平衡的不同选项,并从Nginx,haproxy和清漆得到的结果很差。 我在Rackspace有一个4GB的负载均衡器,击中4x1GB的应用服务器。 我打了一个名为“/慢”的url,在响应之前故意等待500毫秒。 如果我直接点击应用服务器,它可以处理每秒1600-1800的连接速度。 如果我点击Nginx负载平衡器,它只能处理大约2000个连接。 我希望更接近4×1600 = 6000.下面是我用来testing它的命令。 这是在40个256 MB的实例上并行运行的。 我故意将num_call设置为1,因为我想查看连接性能。 任何高于这个,我开始得到很多错误。 httperf –server 50.56.80.227 –port 1555 –uri /slow –rate 50 –num-call 1 –num-conn 100 –timeout 5 这是我的nginxconfiguration: https : //gist.github.com/1299501 所以,这是奇怪的事情,不pipe我使用nginx,haproxy还是varnish,我都得到了大致相同的结果。 但是,我testing了Rackspace的新型云平衡器,并获得了更好的性能(在7000 / s时performance很好)。 既然nginx和其他的都运行在我设置的实例上,并且rackspace平衡器没有运行,我猜测这个系统有些问题。 我宁愿使用我控制的平衡器,所以我可以添加caching,gzip,ssl和其他东西。 我怎样才能找出瓶颈呢? 有什么我应该调整系统来获得更好的性能? 我需要超过4GB的RAM吗? (在testing中拉姆的使用率不高)。 任何其他的随机想法? 更新:我把平衡器的尺寸调整到了8GB,性能performance更好,达到6000-7000,或者与机架式平衡器相比。 这没有任何意义,因为它之前没有用完RAM。 更新:下面是一个httperf输出的例子,当我重载平衡器(在8GB的版本上,比以前更高,但错误是类似的): https ://gist.github.com/1299628

什么是Apache相当于Nginx的try_files?

在Nginx中有一个try_files ,一个configuration指令,用于“按顺序检查文件的存在,并返回find的第一个文件”。 我发现这样做非常整齐 location ~* \.(gif|jpe?g|css|js)$ { try_files $uri 404; } 这是直接提供静态文件的安全方式,而不会打扰Web框架。 我如何在Apache中做同样的事情?

nginx即使通过操作系统parsing,也无法parsing重新装载的上游名称

当重新加载configuration(特别是对于proxy_pass) – 偶尔会看到:nginx:[emerg] host not found in upstream 但是 – 上游服务器的名字将在os(linux)中解决 – 只有nginx似乎有这个问题。 这似乎是最近的回归 – 因为它似乎没有发生在1.0.10版之前。 有没有人最近注意到这个? 试图缩小search范围。

Nginx在使用https访问时从错误的“虚拟主机”提供内容

我有一台服务器在代理设置中同时运行Nginx和Apache,Nginx为静态内容和Apache提供了非常好的dynamic内容。 这个设置目前正在托pipe同一个网站的两个版本,可以称之为production.com和staging.com。 我刚刚完成了使用SSL的production.com网站的设置,但也发现,如果我使用SSL浏览到staging.com,则会获得production.com网站根目录的内容,这显然是错误的。 我被告知使用SSL和非SSL的默认处理程序,这将消除这种行为,但这是我有麻烦的地方。 现在我有这个configuration包含在nginx.conf default_80.conf server { listen 80; server_name ""; return 444; } default_443.conf server { listen 443 default_server ssl; server_name ""; return 444; } staging.com.conf server { listen 80; server_name staging.com; access_log /var/log/nginx/staging.com.log; # static content folders location ^~ /(images|css|js) { root /var/www/staging.com/current; access_log /var/log/nginx/staging.com.static.log; } # static content files location ~* […]

如何logging对不同文件中特定位置的nginx请求?

我有一个nginx作为后端前的代理,我想分开对特定位置的请求到一个单独的文件。 仍然请求应该去相同的后端服务器,但我不想看到他们在主要访问日志里面。 另外我不想指定所有的proxy_东西两次。 server { … access_log /var/log/nginx/jira.access.log full; error_log /var/log/nginx/jira.error.log; client_max_body_size 150m; location /special/ { } location / { # many lines of config params for proxy_… proxy_pass http://dowa-02.example.com:8080; … } }

at的符号“@”在nginx位置块中是什么意思?

我在这里遇到了几个使用这个语法的问题和答案: location @default { # … } location /somewhere { try_files $uri @default; } 我在谷歌上search了很高和低,我似乎无法find任何文件。 这是什么意思,它有什么实际用途? 这是一些variables声明和分配? 对不起,新手问题。