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

标签 http ssl https nginx redirect

我目前在 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 服务器 block ,它将为所有 https 请求提供服务。

server {
   listen         443;
   server_name    example.com;

   ssl            on;

  # rest of the config
}

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

关于http - 在 nginx 中将所有 http 重定向到 https,除了一个文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8426299/

相关文章:

java - 返回 javax.ws.rs.core.Response 的列表,结果为 500

api - 如何使用 Dart http 库、flutter 实现 Post API 调用

http - 在 "must-revalidate"中使用 "Cache-Control: no-cache, must-revalidate"是多么必要

python - 允许 EC2 监听端口 443 以获取来自负载均衡器的未加密请求

ssl - SignTool 错误 : No certificates were found that met all the given criteria

带有匿名 Diffie Hellman 的 Java SSL/TLS

java - 将 http 更改为 https

iphone - 如何将客户端证书包含在 ASIHTTPRequest 中?

css - HTTPS 以及如何引用文件和图像

ruby-on-rails - 如果我使用 Cloudflare 的 "Full SSL",是否需要为 Heroku 购买另一个 SSL 证书?