繁体   English   中英

将所有http重定向到nginx中的https,除了一个文件

[英]Redirect all http to https in nginx, except one file

我目前在http上运行我的网站,并希望将其移至https,以便nginx自动处理重定向。 我猜这很简单。

但是,有一个文件(由于多种原因)是从其他站点进行热链接的,其中一些是通过http进行的,有些是通过https进行的。 我想确保该文件在http和https上均可用,以确保浏览器不会抱怨“混合内容”对话框。 文件的路径如下所示:

http(s)://mydomain.com/scripts/ [some_sha1_hash] /file.js

因此,nginx规则应显示:“如果请求已通过https进行,则一切正常,只需反向代理即可。否则,将所有请求从http重定向到https,除非请求了此文件,在这种情况下,请不要请勿执行此类HTTP-> https重定向。”

谁能告诉我在哪里可以了解这种配置,或者可以帮助我了解配置本身? 提前致谢。 (很抱歉,但是我对nginx的配置还不够熟练。)

这是我所做的,并且有效:

server {
    listen 80;
    server_name example.com;
    charset     utf-8;
    access_log /var/www/path/logs/nginx_access.log;
    error_log /var/www/path/logs/nginx_error.log;

    location /path/to/script.js {
          # serve the file here
    }
    location / {
        return 301 https://example.com$request_uri;
    }
}

这个仅处理http请求并提供所述文件-否则重定向到https。 定义您的ssl服务器块,它将服务于所有https请求。

server {
   listen         443;
   server_name    example.com;

   ssl            on;

  # rest of the config
}

这样,您的脚本文件将在http和https上可用。

尝试这个:

server {
  listen 80; ssl off;
  listen 443 ssl;
  server_name example.com;

  # <ssl settings>
  # ... other settings

  location = /scripts/[some_sha1_hash]/file.js {
    # Empty block catches the match but does nothing with it
  }

  location / {
    if ($scheme = "http") {
      rewrite ^ https://$http_host$request_uri? permanent;
    }

    # ... other settings
  }
}
server {
   listen         80;
   server_name    my.domain.com;
   rewrite        ^ https://$server_name$request_uri? permanent;
}

server {
   listen         443;
   server_name    my.domain.com;

   ssl            on;

   [....]
}

如果我没记错的话,上面的大多数应该可以解决问题

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM