首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >只允许api路由(api/*)访问端口80和403,将其余的重定向到443

只允许api路由(api/*)访问端口80和403,将其余的重定向到443
EN

Server Fault用户
提问于 2020-08-05 13:40:57
回答 1查看 378关注 0票数 0

目前,我的nginx配置为将端口80重定向到端口443。

代码语言:javascript
复制
server {
   listen [::]:443 ssl
   listen 443 ssl;

   root /var/www/my_app/public;

   server_name example.com www.example.com;

   # rest of my main config
}

# Here is port 80 listen
server {
    if ($host = www.example.com) {
        return 301 https://$host$request_uri;
    } # managed by Certbot


    if ($host = example.com) {
        return 301 https://$host$request_uri;
    } # managed by Certbot


    listen 80 default_server;
    listen [::]:80 default_server;
}

如果我注释掉第二个服务器块,并将listen 80 default_server; listen [::]:80 default_server;添加到上面的块中,它允许http和https访问。

我想要实现的是,如果url包含example.com/api/*,不要将http重定向到https,而对于其余的url,则重定向到https。

  • example.com/api/login =允许http
  • example.com/api/test =允许http
  • example.com/api-docs =重定向到https
  • example.com/anything =重定向到https

如何使用nginx实现这一目标?我是否需要有两个服务器块,并在一个单独的文件中移动共享逻辑,并为每个端口分别考虑它们?

EN

回答 1

Server Fault用户

发布于 2020-08-05 15:32:28

对于端口80使用以下块,而不是您拥有的块:

代码语言:javascript
复制
server {
    listen 80;
    server_name example.com www.example.com;

    root /var/www/my_app/public;

    location /api {
        # API specific directives
    }

    location / {
        return 301 https://www.example.com;
    }
}
票数 0
EN
页面原文内容由Server Fault提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://serverfault.com/questions/1028970

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档