![nginx 配置可以通过 curl 运行,但是不能通过浏览器运行?](https://linux22.com/image/752768/nginx%20%E9%85%8D%E7%BD%AE%E5%8F%AF%E4%BB%A5%E9%80%9A%E8%BF%87%20curl%20%E8%BF%90%E8%A1%8C%EF%BC%8C%E4%BD%86%E6%98%AF%E4%B8%8D%E8%83%BD%E9%80%9A%E8%BF%87%E6%B5%8F%E8%A7%88%E5%99%A8%E8%BF%90%E8%A1%8C%EF%BC%9F.png)
我有一个类似于这样的 nginx 配置:
# mysite.com nginx config
server {
listen 80 default_server;
listen [::]:80 default_server;
root /usr/share/mysite.com/ui;
index index.html;
server_name lbhost;
location /ads.txt {
alias /usr/share/mysite.com/ads.txt;
}
location /api/ {
proxy_pass http://localhost:5000/api/;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-NginX-Proxy true;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection keep-alive;
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
}
location / {
proxy_pass http://localhost:4000;
}
}
负载平衡服务器具有 .NET Core Web API 和 Angular Universal UI。这似乎运行得很好,但是
... api 代理似乎可以工作,根路径也可以,并且(通常)ads.txt 文件也可以,但是...如果我执行类似
ubuntu@my-host-name:~$ curl http://localhost/api/version
...从本地机器,我将收到如下响应:
2020.5.13.4ubuntu@my-host-name:~$
...但是如果我从浏览器访问这个端点,我得到的是一个完全空白的页面...甚至源代码也是空的。我希望至少在页面的源文档中看到文本“2020.5.13.4”。
我需要如何配置我的 nginx 服务才能正确发送响应?
更新
根据请求,以下是带有标头的响应:
ubuntu@my-host-name:~$ curl -i http://localhost/api/version
HTTP/1.1 200 OK
Server: nginx/1.14.0 (Ubuntu)
Date: Thu, 21 May 2020 17:00:37 GMT
Content-Type: text/plain; charset=utf-8
Transfer-Encoding: chunked
Connection: keep-alive
2020.5.13.4ubuntu@my-host-name:~$
此外,访问日志报告如下:
ip source redacted - - [21/May/2020:11:02:20 +0000] "GET /api/version HTTP/1.1" 200 21 "-" "curl/7.58.0"
ip source redacted - - [21/May/2020:11:04:05 +0000] "GET /api/version HTTP/1.1" 200 0 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36"
答案1
检查您的 UFW 或防火墙配置。
我遇到了一个问题,UFW 有 HTTP 规则但没有 HTTPS 规则,curl 能够获取 index.html 条目,但不能在浏览器或 postman 上获取。
答案2
我设法使用 https 而不是 http 解决了该问题。
答案3
我遇到这种情况是因为我正在重定向到 HTTPS,但我没有加密证书。
一旦我使用 certbot 添加证书,我就可以提供我的索引页面。