Articles of nginx

WordPresspipe理员密码保护在Nginx服务器上不起作用

我完全与Nginx服务器密码保护混淆。 它不工作,因为我们想要的。 这是我的Nginx网站configuration块。 server { listen 80; server_name example.com; return 301 http://www.example.com$request_uri; } server { listen 80; server_name www.example.com; root /var/www/example.com/public; index index.html index.php; access_log /var/www/example.com/access.log; error_log /var/www/example.com/error.log; location ~ /\.svn/* { deny all; } location ~ \.(htaccess|htpasswd) { deny all; } location ~ \.conf$ { deny all; } location / { try_files $uri $uri/ […]

使用nginx代理多个sockets.io实例

我有两个单独的node.js应用程序运行在nginx后面。 这两个应用程序使用socket.io和express。 一个在5000端口上,另一个在5001端口上。但是我们需要通过端口80访问它们,这样当客户端访问http://example.com/app1时,它们被转发到第一个应用程序, http:// example.com/app2第二个应用程序。 当我们只有一个应用程序时,我们在nginx的Sites Enabledconfiguration文件中有这个设置: location /app1/ { proxy_pass http://127.0.0.1:5000/; } location /socket.io { proxy_pass http://127.0.0.1:5000/socket.io/; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Host $host; proxy_http_version 1.1; } 这工作得很好。 但是,现在我们正在添加第二个应用程序,我不知道如何设置转发。 显然,socket.io不能再转发到5000,因为来自app2的连接需要连接到5001以上。 当然,必须有一种方法来指定socket.io转发作为每个应用程序的子域,但我不知道那会是什么。 任何build议,你可以给我会非常感激。

在nginx上设置SSL

我正在尝试使用Nginx设置SSL,但是我遇到了一些问题。 我收到了所有需要的文件,并创build了如下所示的包,并将其添加到我的站点configuration中,如下所示: server { listen 443; server_name <domain> www.<domain>; ssl_certificate /srv/ssl/<domain>.bundle.cer; ssl_certificate_key /srv/ssl/<domain>.key; location / { proxy_pass http://localhost:4000; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection 'upgrade'; proxy_set_header Host $host; proxy_cache_bypass $http_upgrade; } } server { listen 80; server_name <domain> www.<domain>; location / { rewrite ^ https://$server_name$request_uri permanent; } } 当试图连接时,我得到一个SSL连接错误。 但是,运行diff <(openssl rsa -in /srv/ssl/<domain>.key […]

在NGINX中按域parsingCookie

我在客户端有两个同名的userId的cookie。 他们只有域名设置不同。 一个是tradernet.com,另一个是.tradernet.com 如果我使用$ cookie_userId,nginx会捕获第一个,并不总是相同的。 如何抓取nginx中的精确域的cookie?

NGINX ip_hash负载均衡不起作用

我已经设置了NGINX来将请求加载到我的web应用程序。 一台前端服务器将请求传递给两台后端服务器。 一切正常。 但是,我一直在使用ip_hash指令来确保用户每次都由同一个服务器提供服务。 这似乎没有工作 – 请求两个后端服务器之间的替代,这是用户会话的问题。 configuration应该是相当简单的,所以我不知道这是哪里错了 – 任何想法赞赏。 upstream webservers { ip_hash; server node1.mysite.com; server node2.mysite.com; server localhost:8080 backup; } server { listen 80; server_name www.mysite.com; location / { proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; proxy_pass http://webservers; } }

除了一个域名,nginx忽略https

我最近build立了一个VPS,运行了几个网站(全部使用不同的域),使用nginx将请求代理到正确的应用程序。 我有一个有效的SSL证书为这些域之一,所以我build立了一个http-> https直接为此: server { listen 80; server_name example.com www.example.com; return 301 https://$server_name$request_uri; } server { listen 443 ssl; server_name example.com www.example.com; ssl_certificate ….. (etc) } 对于其他的域名,我只听80端口,显然不设置SSL证书。 虽然所有域都可以访问,并且HTTPSredirect按照主域所预期的那样工作,但是我注意到,当我通过HTTPS加载其他域之一(没有SSL证书)时,nginx正在服务错误的网站,而不是…接受连接,我会期待? 我试图在加载站点之前添加一个默认configuration – 可用: server { listen 80; listen 443 ssl; return 444; } 除了我的主域不再可以通过HTTPS(尽pipeHTTP-> HTTPSredirect仍然有效)这个事实之外,它给了我预期的行为。 这可能是愚蠢的和/或我没有正确理解nginx处理configuration的方式,但我不知道问题的确切位置。 帮帮我?

Nginx服务器块:https,非www和非ssl子域

这是我的场景: 两个网站: https://example.com http://dev.example.com 站点1有一个ssl证书。 网站2没有。 (换句话说,我没有通配符ssl证书。) 通过Nginx我试图build立必要的www和HTTPredirect。 网站1的目标是指导 example.com , www.example.com和https://www.example.com …至 https://example.com 站点2的目标是简单地让http://dev.example.com直接指向自己。 我为目标1尝试了什么 # SSL Redirect server { listen 80; server_name example.com; return 301 https://filethemes.com$request.com; } # WWW Redirect server { listen 80; listen 443 ssl; server_name www.example.com ssl_certificate <my-path-here>.crt; ssl_certificate_key <my-path-here>.key; return 301 https://example.com$request_uri } # Site's Primary Server Block server […]

如何在本地主机上创build多个子域?

使用nginx和php我需要在本地主机上创build多个子域。 我怎么能做到这一点? 我使用nginx作为web服务器的ubuntu 12.04和php5 。 我已经尝试*.servername.com在我的configuration文件。 它不工作。 让我再澄清一点 说一个用户在我的网站(example.com)注册,并创build一个任何名字的微型网站,他希望(假设名称应该可用)说user1是他的名字,他想创build一个微型网站作为user1.example。 com,它应该dynamic发生。 由于一次又一次地创build虚拟主机是不实际的,请帮助

用nginx中的几个参数清理url

我是nginx的新手。 问题是如何用查询string重写url来清理url: 对于一个参数: host.com?page.html/param1=value1 <- host.com/page/value1 www.host.com?param1=value1 <- www.host.com/page/value1 有两个参数: host.com?page.html/param1=value1&param2=value2 <- host.com/page/value1/value2 www.host.com?param1=value1&param2=value2 <- www.host.com/page/value1/value2 对于n个参数: host.com?page.html/param1=value1&param2=value2..&paramN=valueN <- host.com/page/value1/value2/../valueN www.host.com?param1=value1&param2=value2..&paramN=valueN <- www.host.com/page/value1/value2/../valueN

nginx能否testing硬链接或符号链接,并将浏览器客户端redirect到_real_ URL?

想象一下,nginx正在提供一个由rsnapshot创build的静态图像文件夹:/rsnapshots/hourly.0/imageA.png /rsnapshots/hourly.0/imageB.png 所以,如果我去这里: http://example.com/hourly.0/imageA.png : http://example.com/hourly.0/imageA.png ,我看到ImageA.png 如果文件自上次备份以来没有更改,RSnapshot将只创build一个硬链接。 所以image imageA.png没有改变,但是B没有改变。 所以,我最近在hourly.0的备份将如下所示: /rsnapshots/hourly.0/imageA.png /rsnapshots/hourly.0/imageB.png -> /rsnapshots/hourly.1/imageB.png imageB.png只是一个硬链接(不是符号链接)/rsnapshots/hourly.1/imageB.png。 所以如果客户要求http://example.com/hourly.0/imageB.png ,他们会得到imageB.png ,但我可以redirect到: http://example.com/hourly.1/imageB.png : http://example.com/hourly.1/imageB.png ,他们会得到相同的图像。 是否有可能为Nginx的A)检测硬链接B)redirect客户端“真实”的文件,如果它确实检测到? 编辑:正如迈克尔敏锐地观察到的,当涉及硬连接时,没有“真实”文件。 他们都只是指向同一个文件的指针。 在这种情况下,我可以考虑对我的问题进行两个修改:1)Nginx可以在请求时探测其他服务器目录,testing是否存在文件,如果在另一个path中find该文件,则将客户端redirect到另一个path。 2)如果我把我的问题中的“硬链接”replace为“符号链接”,我可以对符号链接进行testing,确定符号链接的位置,然后redirect到符号链接path吗?