V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
NGINX
NGINX Trac
3rd Party Modules
Security Advisories
CHANGES
OpenResty
ngx_lua
Tengine
在线学习资源
NGINX 开发从入门到精通
NGINX Modules
ngx_echo
dotpig
V2EX  ›  NGINX

nginx https 设置求教

  •  
  •   dotpig · 2017-05-16 13:18:56 +08:00 · 4150 次点击
    这是一个创建于 2776 天前的主题,其中的信息可能已经有所发展或是发生改变。

    我要将 http 重定向到 https,用了如下设置:

    server {
        listen      80;
        server_name signup.mysite.com;
        return 301 https://$server_name$request_uri;
    }
    

    但是,这个会把所有 80 端口的访问都重定向到 443 端口。我的要求是内网访问的时候不重定向,即 http 还是 http。请问我该如何设置?

    22 条回复    2017-05-18 10:00:57 +08:00
    dotpig
        1
    dotpig  
    OP
       2017-05-16 13:20:31 +08:00
    补充一下,内网访问是指直接在地址栏输入服务器的内网 ip 地址,如 192.168.0.100。
    hcymk2
        2
    hcymk2  
       2017-05-16 13:24:29 +08:00
    定义 2 个 server.
    jarlyyn
        3
    jarlyyn  
       2017-05-16 14:05:08 +08:00
    server {
    listen 80;
    server_name 192.168.0.100;
    }
    ryd994
        4
    ryd994  
       2017-05-16 14:07:54 +08:00
    listen 192.168.0.100:80;
    msg7086
        5
    msg7086  
       2017-05-16 15:39:38 +08:00
    另开一个 server,指定 server_name。
    dotpig
        6
    dotpig  
    OP
       2017-05-16 17:27:27 +08:00
    @jarlyyn 添加了这个 server,但是还是不行,一旦打入 192.168.0.100 这个网址,就自动跳到 https://signup.mysite.com
    Showfom
        7
    Showfom  
       2017-05-16 17:48:43 +08:00
    @dotpig 浏览器缓存,清空掉
    dotpig
        8
    dotpig  
    OP
       2017-05-16 18:55:01 +08:00
    @Showfom 清理了,没用。头痛啊。
    jarlyyn
        9
    jarlyyn  
       2017-05-16 19:00:51 +08:00
    curl 访问一下看看?
    dotpig
        10
    dotpig  
    OP
       2017-05-16 19:29:23 +08:00
    curl 也是跳转的
    ```
    <html>
    <head><title>301 Moved Permanently</title></head>
    <body bgcolor="white">
    <center><h1>301 Moved Permanently</h1></center>
    <hr><center>nginx</center>
    </body>
    </html>
    ```
    dotpig
        11
    dotpig  
    OP
       2017-05-16 19:30:14 +08:00
    jarlyyn
        12
    jarlyyn  
       2017-05-16 19:31:04 +08:00
    @dotpig

    那你就要贴全部 conf 了
    sujin190
        13
    sujin190  
       2017-05-16 21:42:29 +08:00
    判断下来源 ip,不同来源不同处理不就是了
    hasdream
        14
    hasdream  
       2017-05-16 22:38:13 +08:00 via Android
    判断 remote_addr 然后处理
    GoBeyond
        15
    GoBeyond  
       2017-05-16 23:53:12 +08:00 via Android
    感觉得写个 if 检测客户端 ip 吧。。我那块不太熟,这里仅仅说一下思路。。
    spacewander
        16
    spacewander  
       2017-05-17 00:33:26 +08:00
    根据 $host 变量做跳转?如果是直接输 IP 访问的,浏览器生成的请求里面,Host 报头填的是 IP 地址。所以可以根据这个区分是否“直接输 IP 访问”。
    yatesun
        17
    yatesun  
       2017-05-17 01:18:56 +08:00 via Android
    做个 hsts 吧
    yatesun
        18
    yatesun  
       2017-05-17 01:21:34 +08:00 via Android
    都内网了,你可以通过 ip 直接访问,加个配置或者直接给现在这个加上 default
    yatesun
        19
    yatesun  
       2017-05-17 01:23:36 +08:00 via Android
    如果你又要 301 重定向,同时还要判断客户端 ip,通过 nginx-lua 可以做到
    wizardoz
        20
    wizardoz  
       2017-05-17 09:21:08 +08:00
    你再写一个指定 server_name 为 ip 地址的 server 并设置为 default 应该就可以了。

    现在你的情况应该是只有一个 signup.mysite.com server,所以所有访问都被它处理了。
    kenshin912
        21
    kenshin912  
       2017-05-17 10:54:21 +08:00
    geo $intranet{
    default 0;
    192.168.0.0/24 1;
    }
    server {
    listen 80;
    server_name signup.mysite.com;
    if ($intranet) {
    return 301 http://$server_name$request_uri;
    }
    return 301 https://$server_name$request_uri;
    }

    这样看看呢?
    dotpig
        22
    dotpig  
    OP
       2017-05-18 10:00:57 +08:00
    谢谢各位的回答。问题找到了,之前的修改是对的,但是,我重启 nginx 服务用的是系统的服务控制,但是这个根本就没真正重启 nginx,所以 conf 的修改当然没有起效。后来直接 nginx -s reload,终于加载新的配置文件了。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2780 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 14:06 · PVG 22:06 · LAX 06:06 · JFK 09:06
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.