Articles of nginx

Nginx:匹配位置指令中的服务器主机名

我有nginx在单个服务器指令下运行多个域 server { listen 80; server_name www.domain.com; server_name x.domain.com; server_name y.domain.com; —- —- —- } 现在,我需要使用位置指令来匹配一个子域名,并对其应用基本身份validation。 相当于 location x.domain.com { auth_basic "Admin Login"; auth_basic_user_file /etc/nginx/.htpasswd; } 我如何做到这一点?

nginx不区分大小写重写

我试图让我的nginxredirect尽可能干净。 我明白〜*是不区分大小写的,但是我只能在例子2中使用它。 例1 rewrite ^/foobar http://www.youtube.com/watch?v=oHg5SJYRHA0 redirect; 例子2 – 这个方法可行,但效率不如上面的线。 if ( $request_filename ~* foobar ) { rewrite ^ http://www.youtube.com/watch?v=oHg5SJYRHA0 redirect; } 有没有办法做到不区分大小写的redirect与示例1没有得到它太泥泞? 谢谢。

Debian的jessie nginx用openssl 1.0.2来使用ALPN而不是NPN

我在我的服务器上运行debian jessie,最近升级到了带有http / 2支持的新的nginx web服务器(nginx 1.10)。 就像今天,它工作的很好,web服务器使用http2协议提供内容。 我已经阅读, 铬是下降NPN的支持 ,只允许ALPN 15.5.2016后。 ALPN是扩展,它需要安装openssl 1.0.2,但在debian上jessie只是openssl 1.0.1(在debian backports和另一个版本库中,这个debian没有openssl 1.0.2版本)。 并有问题 – 我已经从SPDY升级到http2,并在几天内,我将不得不closureshttp2,不能使用SPDY,因为这个版本的nignx只有http2。 我也读过,这个版本的debian会卡住openssl 1.0.1,只有debian stretch会有openssl 1.0.2。 但是发布date几乎是一年,Chrome会尽快放弃支持,所以我不想放弃http2协议的好处。 有没有解决scheme,如何在这个系统上安装openssl 1.0.2,而不build立自己的构build(坏的维护)或等待backports存储库有它? 我也不希望两个版本的openssl在我的系统上,如果他们之一必须手动链接和维护。 感谢您的帮助。

nginx unix域套接字错误

我使用fedora 17,当我使用unix域套接字来安装nginx和uwsgi时,当我把套接字放在一个具有适当权限的目录中时,没关系,但是当我把套接字放在/tmp ,会导致nginx错误: connect() to unix:/tmp/MySite.sock failed (2: No such file or directory) while connecting to upstream 该文件确实存在,并具有对nginx用户的读/写权限。 但是造成这个错误的原因,真的让我发疯了,有人可以弄清楚。

空的gif(1×1 pix)文件的用途是什么?

我已经看到一些随机页面提到使用空的gif图像以某种方式提高性能。 我也发现nginx有一个模块就是为了这个目的。 我无法弄清楚,这个小文件是如何提高Web服务器的性能或感知响应能力的。 任何人都可以帮我理解好处吗?

如何禁用Nginx日志logging?

我有以下configuration文件 server { listen 80; server_name _; access_log /var/log/nginx/access.log main; … server { listen 80; server_name example.com access_log off; error_log off; 但它仍然保持loginexample.com虚拟主机。 我究竟做错了什么?

使用代理通道和nginx通过HTTPS SSH

我试图通过https连接使用nginx设置SSH。 我还没有find任何工作的例子,所以任何帮助,将不胜感激! ~$ cat .ssh/config Host example.net Hostname example.net ProtocolKeepAlives 30 DynamicForward 8118 ProxyCommand /usr/bin/proxytunnel -p ssh.example.net:443 -d localhost:22 -E -v -H "User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Win32)" ~$ ssh [email protected] Local proxy ssh.example.net resolves to 115.xxx.xxx.xxx Connected to ssh.example.net:443 (local proxy) Tunneling to localhost:22 (destination) Communication with local proxy: -> CONNECT localhost:22 HTTP/1.0 -> […]

为什么启用TLS 1.2时Internet Explorer 11无法连接到HTTPS站点?

通常我根本不使用Internet Explorer。 我只在devise时使用它来进行接口testing(开发机器和未encryption的http)。 每周我都运行SSL实验室服务器testing,IE11能够访问我的网站。 今天,我发现我的第三方服务有问题。 某些特殊function不适用于Chrome或Firefox,因此我在Windows 7机器上启动了IE11。 而IE11显示我内置的错误页面女巫基本上只是说“页面不能显示”。 而典型的虚拟的bla bla像检查DNS等等。 整个错误页面上绝对没有encryption相关问题的迹象(就像普通浏览器所做的那样)。 回过头几个月,有一个schannel问题,阻止启用TLS1.2的IE访问HTTPS站点。 从那个时候,我的“IE浏览器的WTF清单”包含“禁用TLS1.2”作为检查点。 我应该怎么说… 禁用IE中的TLS1.2工作,我的网站再次可用 。 但是我不能在访问者浏览器上做到这一点。 现在到真正的问题: 为什么IE浏览器启用TLS 1.2时,Internet Explorer 11无法连接到我的HTTPS站点 ? 以及如何解决它在服务器端? SSL实验室告诉我,我的网站上一切正常 。 重要编辑:似乎IE11只能处理非前缀域,而不是TLS1.2启用时的前缀域。 没有前缀(www)的 域名 工作,而包含前缀(www)的域名不起作用 。 在服务器端我使用的是debian / 7 nginx / 1.7.8 openssl / 1.0.1e ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:-DES:!RC4:!MD5:!PSK:!aECDH:EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA

为什么下载的是PHP文件,而不是由Nginx处理?

我看到了同样的问题,许多解决scheme指向添加types处理程序,但这是为Apache。 我正在使用Arch Linux,Nginx,PHP和PHP-FMP,我不知道为什么PHP文件正在下载而不是运行。 这是我的nginx.conf: #user http; worker_processes 1; #error_log logs/error.log; #error_log logs/error.log notice; #error_log logs/error.log info; #pid logs/nginx.pid; events { worker_connections 1024; } http { include mime.types; default_type application/octet-stream; #log_format main '$remote_addr – $remote_user [$time_local] "$request" ' # '$status $body_bytes_sent "$http_referer" ' # '"$http_user_agent" "$http_x_forwarded_for"'; #access_log logs/access.log main; sendfile on; #tcp_nopush on; #keepalive_timeout 0; keepalive_timeout […]

将SSL协议信息通过HTTP头传递到后端

在Poodle漏洞最近暴露之后,我们的团队决定从SSLv3开始。 但在完全删除之前,他们希望警告 日常用户 ,他们的浏览器使用不推荐SSLv3。 所以,我们想出了这个想法 从前端SSL卸载(我们使用nginx)检测协议(SSLv3,TLS1等) 将这个信息(SSL协议)通过HTTP头传递给Apache后端。 然后,我们的后端代码将处理该标题,并在客户端使用SSLv3时发出警告。 我知道nginx具有proxy_set_headerfunction。 所以这个会很简单 proxy_set_header X-HTTPS-Protocol $something; 现在,问题是:显然nginx知道客户端使用的协议,但我怎么能通过HTTP头传递信息到后端? 谢谢 正如类似的线程Apacheredirect用户指出, 如果他们正在使用SSLv3 ,这个想法可能会变得非常非常糟糕的主意。 原因是TLS握手发生在通过TLS隧道发送HTTPstream量之前。 当我们的后端检测到SSL协议时,客户端可能在他的第一个请求中发送了私有数据。 对于永久和长期的解决scheme,我们应该考虑禁用SSLv3。