在 Nginx 文档中,有关于三种不同网络超时的指令,可以为“后端”服务器配置这些超时,如下所示:
proxy_connect_timeout定义与代理服务器建立连接的超时。需要注意的是,这个超时时间通常不能超过75秒。
这很容易理解——Nginx 即将连接到上游“后端”服务器,如果它无法在 X 时间内连接,它将放弃并返回错误。服务器无法访问、连接过多等。
proxy_read_timeout定义从代理服务器读取响应的超时。仅在两个连续的读取操作之间设置超时,而不是为整个响应的传输设置超时。如果代理服务器在此时间内未传输任何内容,则连接将关闭。
这也是有道理的——Nginx 已经与“后端”服务器建立了 TCP 连接,现在即将实际发送请求,但是服务器需要很长时间来处理,如果需要超过 X 时间,则关闭连接并返回给用户。
事实上,我很惊讶 Nginx 关闭了连接,我认为它会保留连接,但会向用户返回一个错误。每次发生超时时重新建立这些“后端”TCP 连接听起来成本很高。
proxy_send_timeout设置将请求传输到代理服务器的超时。仅在两个连续的写入操作之间设置超时,而不是为整个请求的传输设置超时。如果代理服务器在此时间内未收到任何内容,则连接将关闭。
这个我不太明白。我确实有一个理论,但我希望有人证实它。我能想到的这个超时的唯一值是请求负载是否很大(例如,带有 JSON 的大型 POST 请求,或用户想要保存的文档)。将请求传输到“后端”需要将请求分解为更小的 MTU TCP 段,并将它们作为原始请求的“块”发送。因此从技术上讲,直到我们成功地将所有块传输到服务器之前,我们实际上并没有发送请求。Nginx 是否测量每个请求块之间的时间?这就是文档中“写”的意思吗?一旦请求实际发送,Nginx 将开始测量proxy_read_timeout?
根据您的经验,Lighttpd 和 Nginx 哪个更适合 Django?我都用过,几乎看不出有什么区别,它们工作得很好......是否有任何用例,其中一个比另一个表现得更好?回答时请同时考虑配置的简单性和效率。
我通常的设置是./manage.py runfcgi daemonize=false port=8098 host=127.0.0.1通过 daemontools 或init.d脚本和 lighty/nginx 作为反向代理启动一个单独的 Django FCGI 进程(如 中)。
哦,如果您觉得其他一些 http 服务器比 Lighty 和 Nginx 更适合 Django,请不要犹豫,分享您的想法。
我使用 Nginx 作为 4 个 apache 实例的代理。我的问题是 SSL 协商需要很长时间(600 毫秒)。以这个为例:http : //www.webpagetest.org/result/101020_8JXS/1/details/
这是我的 Nginx Conf:
user www-data;
worker_processes 4;
events {
worker_connections 2048;
use epoll;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
access_log /var/log/nginx/access.log;
sendfile on;
keepalive_timeout 0;
tcp_nodelay on;
gzip on;
gzip_proxied any;
server_names_hash_bucket_size 128;
}
upstream abc {
server 1.1.1.1 weight=1;
server 1.1.1.2 weight=1;
server 1.1.1.3 weight=1;
}
server {
listen 443;
server_name blah;
keepalive_timeout 5;
ssl on;
ssl_certificate /blah.crt;
ssl_certificate_key /blah.key;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 5m;
ssl_protocols …Run Code Online (Sandbox Code Playgroud) 再会。
虽然这篇文章讨论了与我在成功安装后偶尔提供空白页的类似设置,但除了空白页之外,我无法提供任何内容。有没有存在的错误/var/log/nginx/error.log,/var/log/php-fpm.log或/var/log/nginx/us/sharonrhodes/blog/error.log。
php-fpm.conf:
[全球的] pid = 运行/php-fpm/php-fpm.pid error_log = 日志/php-fpm.log log_level = 通知 [万维网] 听 = 127.0.0.1:9000 听.所有者 = www 听.group = www 听.mode = 0660 用户 = www 组 = www pm = 动态 pm.max_children = 50 pm.start_servers = 20 pm.min_spare_servers = 5 pm.max_spare_servers = 35 pm.max_requests = 500
nginx.conf:
用户 www;
worker_processes 1;
error_log /var/log/nginx/error.log 通知;
pid /var/run/nginx.pid;
事件{
worker_connections … 我看到一些奇怪的 HTTP 请求来到我的 nginx 服务器。
为了更好地了解发生了什么,我想转储此类查询的整个 HTTP 请求数据。(即,将所有请求标头和正文转储到我可以阅读的地方。)
我可以用 nginx 做到这一点吗?或者,是否有一些 HTTP 服务器允许我开箱即用,我可以通过 nginx 代理这些请求?
更新:请注意,此框有大量正常流量,我想避免在低级别(例如,使用tcpdump)捕获所有流量并稍后将其过滤掉。
我认为首先在重写规则中过滤良好的流量会容易得多(幸运的是,在这种情况下我可以很容易地编写一个),然后只处理虚假流量。
而且我不想将虚假流量引导到另一个盒子,只是为了能够在那里使用tcpdump.
更新 2:为了提供更多详细信息,虚假请求foo在其 GET 查询中具有命名(例如)参数(参数的值可能不同)。好的请求保证永远不会有这个参数。
如果我可以通过它tcpdump或ngrep以某种方式过滤- 没问题,我会使用这些。
我有适用于 Nginx 的 Rails 应用程序(Redmine)。如果我点击任何附件,我的浏览器(firefox,即 chrome)会要求我下载文件。但是如果我点击 txt 类型的附件,我的浏览器会在浏览器中打开这个文件。
据我所知,Nginx 的任务是决定 - 在浏览器中打开文件还是下载文件。我该如何设置?
我在同一个 IP 上有一个通配符 SSL 证书和几个子域。现在我希望我的 nginx 只处理提到的服务器名称并为其他人断开连接,这样它看起来 nginx就不会为未列出的服务器名称运行(不响应,拒绝,死,没有响应的单个字节)。我做以下
ssl_certificate tls/domain.crt;
ssl_certificate_key tls/domain.key;
server {
listen 1.2.3.4:443 ssl;
server_name validname.domain.com;
//
}
server {
listen 1.2.3.4:443 ssl;
server_name _;
// deny all;
// return 444;
// return 404;
//location {
// deny all;
//}
}
Run Code Online (Sandbox Code Playgroud)
我已经尝试了最后一个服务器块中的几乎所有内容,但没有成功。我收到来自已知虚拟服务器的有效响应或错误代码。请帮忙。
我希望得到一些关于如何在我的域的访问日志上设置截断和 gzip'ing 的指导。我注意到核心 nginx 访问日志默认被拆分和压缩,但我的个人访问日志继续增长。
这是可以设置并由 nginx 处理的东西,还是我的系统上管理其核心日志的其他东西?
我的情况是让我们的营销部门有机会自己维护重定向。到现在为止,他们将信息传递给 IT 部门,我们在nginx.conf.
其中一些人非常熟悉 IIS 甚至 Apache 中的重定向,但无法让他们直接访问 nginx 配置。
我看到,.htaccess我可以访问的文件没有 nginx 支持,而且我也不想授予对 nginx 包含的 conf 文件的写访问权限。我希望,我们的营销将在数小时内破坏我们的 nginx 设置......
如果不让他们访问我们的负载均衡器的核心,是否有安全的可能性?
我在我的 ngix conf 文件中进行了重写,该文件正常工作,但它似乎将位置块包含为 $uri 变量的一部分。我只想要位置块之后的路径。我当前的配置代码是:
location /cargo {
try_files $uri $uri/ /cargo/index.php?_REWRITE_COMMAND=$uri&args;
}
Run Code Online (Sandbox Code Playgroud)
使用http://localhost/cargo/testpage重定向的示例 url有效,但是我的 php 文件接收到的“_REWRITE_COMMAND”参数的值为“/cargo/testpage”。我需要去掉位置块,只需要“testpage”作为 $uri
我很确定有一个正则表达式语法来拆分 $uri 并使用 $1 $2 等将其分配给一个新变量,但是我找不到任何示例来使用不属于重写的正则表达式进行变量赋值陈述。我一直在寻找和尝试几个小时,但我似乎无法通过这最后一步。
我也知道我可以在应用程序代码中删除它,但我想尝试在 nginx conf 中修复它的原因是出于兼容性原因,因为它也在 Apache 上运行。我还应该说,我已经找到了一种非常hacky的方法来做到这一点,但它涉及一个“if”语句来检查文件是否存在,并且文档特别指出不要那样做。