使用位置正则表达式通过 nginx 反向代理 nodejs 应用程序时,MIME 类型不正确

使用位置正则表达式通过 nginx 反向代理 nodejs 应用程序时,MIME 类型不正确

我自己托管了一个杰基尔网站与jekyll-管理员进行编辑。

jekyll-admin 添加了基于 nodejs 的管理面板。我希望能够通过 nginx 反向代理在互联网上访问它。

  • jekyll 4.0.0
  • jekyll-admin 0.9.6
  • 节点 10.16.3
  • nginx 1.17.4

此配置有效:

server {
     listen 80;

     server_name www.example.com;
     root /home/foo/_site;

     location ^~ /admin {
         auth_basic "Administration";
         auth_basic_user_file /foo/htpasswd;

         proxy_pass http://127.0.0.1:4000/admin;

         proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
         proxy_set_header X-Forwarded-Proto $scheme;
         proxy_set_header X-Real-IP $remote_addr;
         proxy_set_header Host $http_host;
     }

     location ^~ /_api {
         auth_basic "Administration";
         auth_basic_user_file /foo/htpasswd;

         proxy_pass http://127.0.0.1:4000/_api;

         proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
         proxy_set_header X-Forwarded-Proto $scheme;
         proxy_set_header X-Real-IP $remote_addr;
         proxy_set_header Host $http_host;
     }

     # caching for static site

     location ~* \.(?:jpg|jpeg|gif|png|ico|cur|gz|svg|svgz|mp4|ogg|ogv|webm|htc)$ {
       expires 1M;
       add_header Cache-Control "public";
     }

     location ~* \.(?:css|js)$ {
       expires 1h;
       add_header Cache-Control "public";
     }
 }

但是我想删除重复项,因此我合并了代理的两个位置块并使用正则表达式:

server {
     listen 80;
     listen [::]:80;

     server_name www.example.com;
     root /home/foo/_site;

     location ~ ^/(admin|_api)(/.*)? {
          auth_basic_user_file /foo/htpasswd;
          auth_basic "Administration";

          proxy_pass http://127.0.0.1:4000$1;

          proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
          proxy_set_header X-Forwarded-Proto $scheme;
          proxy_set_header X-Real-IP $remote_addr;
          proxy_set_header Host $http_host;
     }
}

但我的网站不再工作 - 我现在得到一个空白页,浏览器错误控制台显示

资源来自“http://www.example.com/admin/styles.css”由于 MIME 类型(“text/html”)不匹配(X-Content-Type-Options:nosniff)而被阻止。管理员

资源来自“http://www.example.com/admin/bundle.js”由于 MIME 类型(“text/html”)不匹配(X-Content-Type-Options:nosniff)而被阻止。管理员

源加载失败“http://www.example.com/admin/bundle.js”。管理员:11:1

是什么原因导致这里的 js 和 css 内容获得错误的 MIME 类型?

nginx 日志没有显示任何异常。

答案1

愚蠢的错误proxy_pass

   location ~ ^/(admin|_api)(/.*)? {
      ...
      proxy_pass http://127.0.0.1:4000/$1$2;
    }

相关内容