似乎有nginx web服务器的两个活动分支 :“mainline”分支(当前1.9.x)和“稳定”分支(当前1.8.x)。 任何人都可以提供一个官方来源,描述这两个分支之间的区别,以及如何select它们之间的?
HTTP头X-Forwarded-For的维基百科描述是: X-Forwarded-For:client1,proxy1,proxy2,… 指令real_ip_header的nginx文档部分读取: 该指令设置用于传送replaceIP地址的标题的名称。 在X-Forwarded-For的情况下,该模块使用X-Forwarded-For报头中的最后一个 IP进行replace。 [强调我的] 这两个描述看起来不一致。 在我们的场景中, X-Forwarded-For头部与描述的完全相同 – 客户端的“真实”IP地址是最左边的条目。 同样,nginx的行为是使用最右边的值 – 显然,这只是我们的代理服务器之一。 我对X-Real-IP理解是,它应该被用来确定实际的客户端IP地址 – 而不是代理。 我错过了什么,或者这是一个在Nginx的错误? 而且,除此之外,有没有人有任何build议如何使X-Real-IP头显示最左边的值,如X-Forwarded-For ?
我不希望任何人能够从互联网上检测到我正在使用NGINX甚至是Ubuntu。 有些工具(比如BuiltWith)可以扫描服务器来检测他们正在使用的工具。 此外,一些破解工具可能有助于检测。 什么是最好的/最接近我可以隐藏所有这些信息从外面?
当我想部署Django应用程序时,有很多关于如何configurationnginx与uWGSI配合的教程。 但是为什么我需要在这个套件中使用nginx? uWSGI本身可以服务于WSGI Python应用程序,它可以提供静态文件,也可以做SSL。 nginx能做哪些uWSGI不能做的?
我第一次使用Nginx,但是我更熟悉Apache和Linux。 我正在使用一个现有的项目,当我试图看到index.php我得到一个404文件未find。 这里是access.log条目: 2013/06/19 16:23:23 [error] 2216#0: *1 FastCGI sent in stderr: "Primary script unknown" while reading response header from upstream, client: 127.0.0.1, server: localhost, request: "GET /index.php HTTP/1.1", upstream: "fastcgi://127.0.0.1:9000", host: "www.ordercloud.lh" 这里是网站可用的文件: server { set $host_path "/home/willem/git/console/www"; access_log /www/logs/console-access.log main; server_name console.ordercloud; root $host_path/htdocs; set $yii_bootstrap "index.php"; charset utf-8; location / { index […]
我有几台服务器在同一台机器上运行,一些只使用http,一些使用http和https。 有几个服务器块定义在主configuration文件中包含的单独文件中。 我为httpbuild立了一个“默认”服务器,这个服务器将为通用的“维护页面”提供与其他configuration文件中其他服务器名称不匹配的请求。 http缺省服务器按预期工作,它使用server_name“_”,它首先出现在包含列表中(因为我已经观察到,在服务器间重复server_name的情况下,首先使用的是一个)。 这很好。 我期望相同的确切的服务器块(只有切换“听80默认服务器”“听443默认服务器”,而不是服务页面“返回444”),但事实并非如此。 相反,新的默认https服务器实际上是抓取所有传入的https连接并导致它们失败,尽pipe其他服务器块为传入请求提供了更合适的server_name。 删除新的默认https服务器将导致恢复半正确的行为:带有https的网站将全部正确加载; 但没有HTTPS的网站都将被路由到包含文件中的第一个HTTPS服务器(根据文档,如果没有“default_server”出现,那么出现的第一个服务器块将是“默认”)。 所以我的问题是,什么是正确的方式来定义一个“默认服务器”在Nginx的SSL连接? 为什么当我明确地设置一个“default_server”时,它变得贪婪并且抓住所有的连接,而当我隐式地让nginx决定“默认服务器”时,它就像我所期望的那样工作(把不正确的服务器设置为默认服务器,行为正确)? 这是我的“默认服务器”。 Http工作而不破坏其他服务器。 Https打破其他服务器,并消耗所有。 server { listen 443 ssl default_server; server_name _; access_log /var/log/nginx/maintenance.access.log; error_log /var/log/nginx/maintenance.error.log error; return 444; } server { listen *:80 default_server; server_name _; charset utf-8; access_log /var/log/nginx/maintenance.access.log; error_log /var/log/nginx/maintenance.error.log error; root /home/path/to/templates; location / { return 503; } error_page 503 @maintenance; […]
我看了一下nginx的文档,但仍然把我搞糊涂了 try_files如何工作? 这是文件所说的 来自Nginx的HttpCoreModule try_files 语法:try_files path1 [path2] uri 默认:无 上下文:服务器,位置 可用性:0.7.27 按顺序检查文件的存在,并返回find的第一个文件。 尾部的斜线表示一个目录 – $ uri /。 在没有find文件的情况下,调用到最后一个参数的内部redirect。 最后一个参数是回退URI并且必须存在,否则会引发内部错误。 与重写不同,如果后退不是一个命名的位置,$ args不会自动保留。 如果你需要保存参数,你必须明确地这样做: 我不明白它是如何检查path,以及如果我不想要一个内部错误,并让它恢复path的其余部分,以努力find另一个文件? 如果我在/path/app/cache/url/index.html有一个caching文件,如果失败,请尝试/path/app/index.php我该如何写? 如果我写了 try_files /path/app/cache/ $uri include /etc/nginx/fastcgi_params; fastcgi_pass unix:/var/run/php-fastcgi/php-fastcgi.socket; fastcgi_param SCRIPT_FILENAME $document_root/index.php; 我有index index.php index.html index.htm; 当我访问/urlname它会尝试检查/path/app/cache/urlname (index.php然后) /path/app/cache/urlname /path/app/cache/urlname/index.html ? 如果我们在try_files之后忽略所有的东西,try_files是否可以检查这个caching文件夹? 我一直在尝试和失败。
tail -f /var/log/nginx/error.log 2013/05/04 23:43:35 [error] 733#0: *3662 rewrite or internal redirection cycle while internally redirecting to "/index.html", client: 127.0.0.1, server: _, request: "GET /robots.txt HTTP/1.1", host: "kowol.mysite.net" HTTP/1.1", host: "www.joesfitness.net" 2013/05/05 00:49:14 [error] 733#0: *3783 rewrite or internal redirection cycle while internally redirecting to "/index.html", client: 127.0.0.1, server: _, request: "GET / http://www.qq.com/ HTTP/1.1", […]
几个小时后,让nginx提供robots.txt等单个文件(提示:每次清除浏览器caching ),最后我用两种不同的方式,一种使用alias指令,一种使用root指令,如下所示: location /robots.txt { alias /home/www/static/robots.txt; } location /robots.txt { root /home/www/static/; } 两者有什么function上的区别? 还是安全问题? 与其他指令有冲突吗? (在另一个/静态位置都显得很好)。 或者有什么理由select一个呢? 注 – 我没有在同一时间使用两个:)而是我尝试了每一个,一次一个,都工作。 我不是问他们如何在同一个文件中一起交互,但哪一个会更好用。
我曾经看到有人build议将所有这些内容合并到一个stream程中,但是它们似乎有很多重叠的特性,所以我想深入了解为什么在访问实际的Web服务器之前可能需要通过3个不同的程序。 nginx的: ssl:是的 压缩:是的 caching:是的 后端池:是的 漆: ssl:不(stunnel?) 压缩:? caching:是(主要function) 后端池:是的 HAProxy的: ssl:不(stunnel) 压缩:? caching:不 后端池:是(主要function) 将所有这些链接在主要Web服务器之前的目的仅仅是为了获得其主要function优势? 有这么多的守护进程一起做类似的事情似乎相当脆弱。 你的部署和订购偏好是什么?为什么?