我自己托管了一个杰基尔网站与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;
}