【问题标题】:Nginx HTTPS when only matching admin subfolder [closed]仅匹配管理子文件夹时的 Nginx HTTPS [关闭]
【发布时间】:2012-09-13 02:11:46
【问题描述】:

我已设法通过以下方式将所有 /admin 请求重定向到 https:

server {
    listen 80;

    location /admin {
        rewrite ^ https://$server_name$request_uri?$args permanent;
    }
}

但非 /admin https 请求需要重定向回 http。以下代码在重定向方面有点工作,但 /admin 返回 404。在空块中需要什么来保持 nginx 快乐?

server {
    listen       443;
    server_name  mywebsite.local.com;

    ssl                  on;
    ssl_certificate      /opt/nginx/server.crt;
    ssl_certificate_key  /opt/nginx/host.key;

    ssl_session_timeout  5m;

    ssl_protocols  SSLv2 SSLv3 TLSv1;
    ssl_ciphers  HIGH:!aNULL:!MD5;
    ssl_prefer_server_ciphers   on;

    root /Users/me/Sites/website/public;

    location /admin {
        # here is your configuration for admin requests
        # don't forget to set "root"
    }

    location / {
        return 301 http://$server_name$request_uri;
    }

    passenger_enabled on;
    rails_env development;
}

error.log 中的错误:

12 open() "/Users/me/Sites/website/public/admin" failed (2: No such file or directory),     client: 127.0.0.1, server: something.com, request: "GET /admin HTTP/1.1", host: "something.com"

谢谢

【问题讨论】:

  • PS,你不能根据wiki.nginx.org/HttpCoreModule#location做不匹配。 “没有不匹配正则表达式的语法。而是匹配目标正则表达式并分配一个空块,然后使用 location / 匹配其他任何内容。”
  • VBart,我已经添加了我的完整配置。感谢您的观看。

标签: regex ssl https nginx regex-negation


【解决方案1】:
server {
    listen 80;

    location /admin {
        return 301 https://$server_name$request_uri;
   }

    location / {
        # here is your configuration for non-admin requests
        # don't forget to set "root"
    }
}

server {
    listen 443;

    location /admin {
        # here is your configuration for admin requests
        # don't forget to set "root"
    }

    location / {
        return 301 http://$server_name$request_uri;
    }
}

【讨论】:

  • 嗨 VBart,这是我最初拥有的,但 /admin URL 得到 404。听 443 后我设置了根目录。知道什么可能导致 404 吗?谢谢
  • 错误日志应显示导致此问题的原因。你看了吗?
  • 好的,我检查了日志。这是错误。我不明白为什么 Rails 不接受 /admin 作为有效 URL 并返回 404。错误:12 open() "/Users/me/Sites/website/public/admin" failed (2: No such file or directory ),客户端:127.0.0.1,服务器:something.com,请求:“GET /admin HTTP/1.1”,主机:“something.com”
  • 您是否在location /admin 中配置了Rails?
  • 可能你至少需要定位块内的passenger_enabled on; 指令。
【解决方案2】:

这似乎可行:

    if ($request_uri !~* ^/admin)
    {
        rewrite ^ http://$server_name$request_uri?$args permanent;
    }

谁有更好的办法?

【讨论】:

猜你喜欢
  • 2012-07-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-07-12
  • 1970-01-01
  • 1970-01-01
  • 2017-07-15
  • 2017-05-30
相关资源
最近更新 更多