技术解析

nginx https 设置求教
0
2021-05-21 01:59:54
idczone

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

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

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


补充一下,内网访问是指直接在地址栏输入服务器的内网 ip 地址,如 192.168.0.100。

定义 2 个 server.

server {
listen 80;
server_name 192.168.0.100;
}

listen 192.168.0.100:80;

另开一个 server,指定 server_name。

添加了这个 server,但是还是不行,一旦打入 192.168.0.100 这个网址,就自动跳到 https://signup.mysite.com

浏览器缓存,清空掉

清理了,没用。头痛啊。

curl 访问一下看看?

curl 也是跳转的
```

301 Moved Permanently

301 Moved Permanently



nginx



```

@jarlyyn


那你就要贴全部 conf 了

判断下来源 ip,不同来源不同处理不就是了

判断 remote_addr 然后处理

感觉得写个 if 检测客户端 ip 吧。。我那块不太熟,这里仅仅说一下思路。。

根据 $host 变量做跳转?如果是直接输 IP 访问的,浏览器生成的请求里面,Host 报头填的是 IP 地址。所以可以根据这个区分是否“直接输 IP 访问”。

做个 hsts 吧

都内网了,你可以通过 ip 直接访问,加个配置或者直接给现在这个加上 default

如果你又要 301 重定向,同时还要判断客户端 ip,通过 nginx-lua 可以做到

你再写一个指定 server_name 为 ip 地址的 server 并设置为 default 应该就可以了。
现在你的情况应该是只有一个 signup.mysite.com server,所以所有访问都被它处理了。

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;
}
这样看看呢?

谢谢各位的回答。问题找到了,之前的修改是对的,但是,我重启 nginx 服务用的是系统的服务控制,但是这个根本就没真正重启 nginx,所以 conf 的修改当然没有起效。后来直接 nginx -s reload,终于加载新的配置文件了。

数据地带为您的网站提供全球顶级IDC资源
在线咨询
专属客服