NGNIX 强制实施 HTTPS

NGNIX 强制实施 HTTPS

对于我的 Webapp (Angular App),我们使用 NGNIX 作为 Web 服务器。我有一个任务需要确保所有资产/图像都通过 HTTPS 加载。

在浏览器开发工具中,我看到请求是通过 HTTPS 发送的。但是,响应位置标头以 HTTP URL 的形式返回(见下面的屏幕截图)。

来自浏览器开发工具的截图

以下是当前的 NGNIX 配置:

server {
    listen       80;
    server_name  localhost;
    root         /usr/share/nginx/html;

    # kill cache
    add_header Last-Modified $date_gmt;
    add_header Cache-Control 'no-store, no-cache';
    if_modified_since off;
    expires off;
    etag off;

    # Enforce HSTS
    add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;

    # Disable iFrames
    add_header x-frame-options "SAMEORIGIN" always;

    # detect and reject CRLF
    if ($request_uri ~* "%0A|%0D" ) {
      return 400;
    }

    # Fallback to default language if no preference defined by browser
    if ($accept_language ~ "^$") {
      set $accept_language "de";
    }

    # Redirect "/" to Angular app in browser's preferred language
    rewrite ^/$ /$accept_language permanent;

    if ($uri !~ ^/(en-US|de)) {
      return 301 /$accept_language$uri$args;
    }

    # Everything under the Angular app is always redirected to Angular in the correct language
    location ~ ^/(en-US|de) {
        try_files $uri$args $uri$args/ /$1/index.html;

      # Add security headers from separate file
      # include /etc/nginx/security-headers.conf;
    }

    location /health {
      access_log off;
      return 200;
      add_header Content-Type text/plain;
      # Enforce HSTS
      add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
    }
}

非常感谢您的帮助。谢谢

答案1

/en-US/我可以看到,在你的情况下,nginx 正在重定向到。

if ($uri !~ ^/(en-US|de)) {
  return 301 /$accept_language$uri$args;
}

我假设由于内部通信(LB 和 nginx 之间)是通过 http/80 进行的,所以 nginx 只是通过 http 重定向负载均衡器,这就是您在位置标头中看到 http 的原因。

我不确定 .png 文件是否真的通过 http 传递给用户。您可以直接从 http 访问 .png 文件吗?如果不能,则访问实际上是通过 https 传递的,并且 http 通信仅在内部进行。如果可以,那么您应该在负载均衡器端设置从 http 重定向到 https。

如果您也想在内部强制使用 https,我会尝试这样做:

return 301 https://$host/$accept_language$uri$args;

您还可以检查absolute_redirect理查德在评论中提到的内容。

相关内容