Articles of nginx

麒麟工人间歇性地超时

我似乎没有理由得到麒麟工人的间歇性超时,我想要一些帮助来debugging实际的问题。 这更糟,因为它可以处理大约10到20个请求,然后1将超时,然后再有10 – 20个请求,同样的事情会再次发生。 我已经创build了一个开发环境来说明这个问题,所以除了我之外没有任何交通。 这个堆栈是Ubuntu 14.04,Rails 3.2.21,PostgreSQL 9.3.4,Unicorn 4.8.3,Nginx 1.6.2。 问题 我会详细描述它不工作的时间。 我通过浏览器请求一个url。 Started GET "/offers.xml?q%5bupdated_at_greater_than_or_equal_to%5d=2014-12-28T18:01:16Z&q%5bupdated_at_less_than_or_equal_to%5d=2014-12-28T19:30:21Z" for 127.0.0.1 at 2014-12-30 15:58:59 +0000 Completed 200 OK in 10.3ms (Views: 0.0ms | ActiveRecord: 2.1ms) 正如你所看到的,这个请求在10.3ms内成功地完成了200个响应状态。 然而,浏览器挂了大约30秒,独angular兽杀死了工人: E, [2014-12-30T15:59:30.267605 #13678] ERROR — : worker=0 PID:14594 timeout (31s > 30s), killing E, [2014-12-30T15:59:30.279000 #13678] ERROR — : reaped […]

无法在nginx 1.7.9上安装apt-get install nginx-extras软件包

我试图在开发者Ubuntu 网站上按照本指南安装Phusion Passenger for nginx 。 我已经安装并运行了Nginx,版本是1.7.9-1〜trusty。 我试图按照先决条件: apt-get install nginx-extras并失败,错误消息: Unpacking nginx-common (1:1.6.2-2.4.0.56~trusty1) … dpkg: error processing archive /var/cache/apt/archives/nginx-common_1%3a1.6.2-2.4.0.56~trusty1_all.deb (–unpack): trying to overwrite '/usr/share/nginx/html/index.html', which is also in package nginx 1.7.9-1~trusty Preparing to unpack …/nginx-extras_1%3a1.6.2-2.4.0.56~trusty1_amd64.deb … Unpacking nginx-extras (1:1.6.2-2.4.0.56~trusty1) … dpkg: error processing archive /var/cache/apt/archives/nginx-extras_1%3a1.6.2-2.4.0.56~trusty1_amd64.deb (–unpack): trying to overwrite '/usr/sbin/nginx', which is also in […]

是否真的有可能使用PHP会话与nginx fastcgicaching进行身份validation?

我最近把一个opencart实例从Apache + mod_php切换到了nginx + fastcgi + php-fpm。 我一直试图通过fastcgi-cachecaching大多数页面。 不幸的是,许多用户开始报告鬼命令或接pipe其他帐户(weeee !!!!)从彻底挖掘,似乎页面被caching与set-cookie! 因此,没有发送预先存在的会话cookie的后续用户正在获取caching启动器的会话cookie。 坏! 根据所有的文件那里,下面的设置应该是防止这种情况发生(至less我的理解:) fastcgi_pass_header Set-Cookie; fastcgi_pass_header Cookie; fastcgi_ignore_headers Cache-Control Expires Set-Cookie; 当我通过单个caching看,我注意到几个页面与set-cookie:[somerandomsessionid]根据fastcgi_cache_valid下的nginx文档… 如果头部包含“Set-Cookie”字段,则不会caching这样的响应。 通过包含Set-Cookie与fastcgi_ignore_headers,我告诉它cachingset-cookie? 在许多例子中, Set-Cookie是fastcgi_ignore_headers参数的一部分。 还是应该防止Set-Cookie被处理,即使它明显在caching文件中? 以下是我的configuration的相关部分: 位置〜.php $ {… fastcgi_next_upstream error timeout invalid_header http_500 http_503; fastcgi_cache OPENCART; fastcgi_cache_bypass $no_cache; fastcgi_no_cache $no_cache; fastcgi_cache_purge $purge_method; fastcgi_cache_methods GET HEAD; fastcgi_cache_valid 200 5m; fastcgi_cache_use_stale error timeout invalid_header […]

jenkins发布ssh成功连接服务器,但失败的put文件

我有一个问题,当我build立我的工作,它不能把我的文件在控制台输出服务器目录我得到的消息“错误:发布exception,exception消息[权限被拒绝]” 我有以下日志输出: SSH: Connecting from host [rp_ci] SSH: Connecting with configuration [web-dev] … SSH: Creating session: username [ubuntu], hostname [xx.xx.xx.xxx], port [22] SSH: Connecting session … SSH: Connected SSH: Opening SFTP channel … SSH: SFTP channel open SSH: Connecting SFTP channel … SSH: Connected SSH: Remote root is not absolute, getting absolute directory from PWD […]

Nginx不会减less最大年龄

我正在尝试将Nginx设置为运行在Unicorn上的Rails应用程序的反向代理。 我的应用程序有一些公共页面,我想caching60分钟的持续时间,所以我设置了最大年龄标题。 此外,我在Nginx的服务器块中添加了proxy_cache选项。 proxy_cache default; 并定义了这个caching proxy_cache_path /var/www/nginx_cache keys_zone=default:10m max_size=500m; 我已经build立了我的应用程序来添加这个头到我的可caching的响应 Cache-Control: max-age=3600, public 当客户第一次碰到页面时,页面被渲染并返回响应。 但是,在随后的请求中,nginx不会减lessmax-age计数器。 因此,访问者可能会在到期前一分钟访问我的页面,这意味着他正在看到59分钟的内容。 但是,将这个副本保存在他的浏览器中60分钟,然后才能得到一个新的副本。 我可以通过Nginx来减去所经过的时间,所以如果访问者点击一个已经在Nginxcaching中25分钟的页面,最大年龄将是35分钟(2100秒)?

高stream量服务器上的间歇性连接问题

一些简要的背景:我们已经从我们的用户那里得到非常间歇性的连接问题的报告。 由于连接失败或SSL握手问题(我认为这是由于连接问题),用户每天会多次重新加载他们所在的页面。 发生得如此之快,以至于我无法在这些事件中收集任何数据。 它往往会自行消失,只能在晚些时候再回来,通常是在高峰时段。 关于我们的设置一点点:我们有三个虚拟IP在循环DNS中,由Keepalivedpipe理我们的应用服务器池。 nginx正在接受SSL连接,这些连接会上传到haproxy以分发到其他应用程序服务器。 由于这些问题已经出现,我已经更新了服务器上的所有软件(包括从CentOS5到CentOS6),这并没有帮助。 我已经在这里发布了关于我们的nginxconfiguration,这似乎是好的。 它主要基于Mozilla的nginxconfiguration生成器来实现SSL最佳实践。 我被build议注意TCP统计数据。 但是,我不太清楚如何解释这些。 这是我从昨天重新启动的应用程序服务器上的netstat -s的输出(大概是昨天的计数器为0): Ip: 1021579809 total packets received 4875 forwarded 0 incoming packets discarded 1021562810 incoming packets delivered 1033056732 requests sent out 1 outgoing packets dropped 76648 dropped because of missing route 2 fragments dropped after timeout 7072 reassemblies required 2020 packets reassembled ok 2 […]

“echo 0> / proc / sys / kernel / hung_task_timeout_secs”禁用此消息

我的一台服务器(Ubuntu 12.04,16CPU,32GB RAM)运行我的网站(Nginx 1.1.19,PHP5-FPM,Php 5.3.10,Symfony2 Web Framework) 突然,用户开始得到HTTP 5 **错误。 当我在服务器上,有大量的磁盘IO,罪魁祸首是[flush] 。 当我使用dmesg浏览内核日志时,发现[flush]是nginx进程需要花费太多时间来刷新的原因。 (我认为) 事件发生时的内核日志条目: Jan 31 22:51:25 ip-10-0-0-160 kernel: [115562.048088] INFO: task nginx:17876 blocked for more than 120 seconds. Jan 31 22:51:25 ip-10-0-0-160 kernel: [115562.050180] "echo 0 > /proc/sys/kernel/hung_task_timeout_secs" disables this message. Jan 31 22:51:25 ip-10-0-0-160 kernel: [115562.057484] nginx D ffffffff81806240 0 17876 17875 […]

从代理传递得到响应后执行lua脚本

我有nginx阻止哪个代理传递请求到基于请求的不同的负载平衡器,首先调用一个lua脚本。 location / { set $provider_key null; set $cached_key null; set $credentials null; set $usage null; set $proxy_pass null; set $secret_token null; proxy_ignore_client_abort on; access_by_lua_file conf/3scale.lua; proxy_pass $proxy_pass ; proxy_set_header X-Real-IP $remote_addr; proxy_set_header Host api.example.com; proxy_set_header X-3scale-proxy-secret-token $secret_token; post_action /out_of_band_authrep_action; } 现在我需要一个特定的api端点,我需要捕获代理请求的特定响应头,并调用另一个lua脚本将参数 – 头部值传递给它。 我能够在nginxvariables中捕获该头部的值,并能够打印该日志。 我不明白的是在服务器端应该把这个新的lua脚本叫做什么地方。 希望有人能帮助我。 谢谢 !!

NGINX内部负载平衡+ PHP-FPM上游导致随机双重请求/提交

我们遇到了一个非常严重的问题,在看似随机的时候,我们得到了一个由我们的应用程序处理的重复请求。 通常情况下,用户提交表单,偶尔会将其内容保存两次。 我们已经消除了这个问题被JS驱动的双重提交的可能性。 我们有一台networking分析仪,certificate只有一个请求正在进行。 但是,我们也已经certificate,PHP应用程序当然是在整个执行两次。 彻底调查后,应用程序中没有任何逻辑问题会导致这种双重保存行为。 编辑:我们删除了“Keepalive 8” 来自NGINX conf,我们不再得到双重意见。 相反,在有问题的请求中我们得到了一个504 我将不胜感激任何人谁可以看看下面,让我知道,如果有什么突出的 – 谢谢! 我们的NGINX和PHP-FPMconfiguration如下: /etc/nginx/nginx.conf user nginx; worker_processes 1; worker_rlimit_nofile 10240; error_log /var/log/nginx/error.log; pid /var/run/nginx.pid; events { worker_connections 1024; multi_accept on; use epoll; } http { server_tokens off; add_header 'Access-Control-Allow-Origin' http://$host; add_header 'Access-Control-Allow-Methods' 'GET, POST'; add_header 'X-Powered-By' 'smartCMS'; upstream php_fpm { least_conn; server 127.0.0.1:9000 […]

configurationNginx只允许指定的主机

我正在DigitalOcean上运行一个Django项目(使用Nginx,Gunicorn和Postgres),并且在settings.py中指定了“允许的主机”,如下所示: ALLOWED_HOSTS = ['sub.domain.tld'] 根据DigitalOcean自己设置的内容,根据我发现的博客文章,我还修改了我的页面(/ etc / nginx / sites-available / django)的Nginx设置: if ($host !~* ^(sub.domain.tld)$ ) { return 444; } location / { proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Host $http_host; proxy_redirect off; proxy_pass http://app.server; } 我仍然继续从我的Django项目接收电子邮件,就像这样: “无效的HTTP_HOST标题:'1111.ip138.com'。您可能需要将u'1111.ip138.com'添加到ALLOWED_HOSTS。 当我从浏览器访问网站时,一切似乎都很好。 你能让我知道我的configuration问题在哪里吗? 谢谢你,托比亚斯