【发布时间】:2020-05-21 15:26:24
【问题描述】:
目标是支持 mydomain.tld/blog 与托管 mydomain.tld 的 netlify 一起工作。
我从 netlify _redirects 文件代理如下/blog/* http://BLOG_IP/blog/:splat 200
我在路径BLOG_IP/blog 上有一个幽灵博客。当我访问此 URL 时,该博客可以正常使用以下 Nginx 访问日志
// Directly accessed
MY_IP - - [21/May/2020:15:10:29 +0000] "GET /blog/ HTTP/1.1" 200 4935 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.122 Safari/537.36"
当我尝试通过 mydomain.tld/blog 时,我收到 404 Nginx 错误,并显示以下访问日志。
// Proxied through Netlify
NETLIFY_IP - - [21/May/2020:15:10:25 +0000] "GET /blog/ HTTP/1.1" 404 209 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.122 Safari/537.36"
Netlify 代理运行良好。这是完全相同的请求,但不知何故,一个是 200,另一个是 404。如您所见,两者都在访问"GET /blog/ HTTP/1.1" 路由。
这是我的 Nginx 配置
server {
server_name MY_DOMAIN;
root /var/www/ghost/system/nginx-root; # Used for acme.sh SSL verification (https://acme.sh)
location ~ ^/ {
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;
proxy_pass http://127.0.0.1:2368;
proxy_redirect off;
}
location ~ /.well-known {
allow all;
}
listen 443 ssl; # managed by Certbot
ssl_certificate /etc/letsencrypt/live/MY_DOMAIN/fullchain.pem; # managed by Certbot
ssl_certificate_key /etc/letsencrypt/live/MY_DOMAIN/privkey.pem; # managed by Certbot
include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
client_max_body_size 50m;
}
server {
if ($host = MY_DOMAIN) {
return 301 https://$host$request_uri;
} # managed by Certbot
listen 80;
server_name MY_DOMAIN;
return 404; # managed by Certbot
}
我的幽灵配置是
{
"url": "https://MY_DOMAIN/blog",
"server": {
"port": 2368,
"host": "127.0.0.1"
},
...
}
我有两个问题:
1)为什么代理请求与直接请求之间存在不一致?
2)如何在使用Netlify作为ghost服务器时实现MY_DOMAIN/blog
【问题讨论】:
标签: nginx proxy reverse-proxy netlify ghost-blog