Ngrok 没有正确地隧道 Nginx

Posted

技术标签:

【中文标题】Ngrok 没有正确地隧道 Nginx【英文标题】:Ngrok not tunneling properly Nginx 【发布时间】:2020-05-09 03:19:04 【问题描述】:

我的烧瓶应用程序通过我的 VM 部署在 nginx 上。

一切都部署好了,我可以在 http://my.ip.number 上请求我的 api(我有一个公共 IP)

但是当我运行 Ngrok (我需要 https 并且我没有域名来生成 SSL 证书)时,URL https//number.ngrok.io 显示给我Nginx 主页(欢迎使用 Nginx)而不是我的 webapp

为什么会这样?

PD:当我运行“curl localhost”时,我得到了 Nginx 欢迎页面,但是当我执行“curl -4 localhost”时,我得到了我的 webapp 主页

etc/nginx/site-available/myproject

server 
    listen 80;
    server_name 0.0.0.0;
    location / 
        include proxy_params;
        proxy_pass http://unix:/home/datascience/chatbot-cima/chatbot.sock;
    


server 
    listen 80;
    server_name 127.0.0.1;

    location / 
        proxy_pass http://unix:/home/datascience/chatbot-cima/chatbot.sock;
    


server 
    listen 80;
    server_name localhost;

    location / 
        proxy_pass http://unix:/home/datascience/chatbot-cima/chatbot.sock;
    


server 
    listen 80;
    server_name public.ip;

    location / 
        proxy_pass http://unix:/home/datascience/chatbot-cima/chatbot.sock;
    

【问题讨论】:

【参考方案1】:

来自 ngrok 的任何请求都将 Host 标头设置为 ngrok URL。 nginx 的行为是尝试匹配上面配置中的server 块之一,如果没有server_name 匹配Host 标头,则默认为第一个。

但是,我猜在/etc/nginx/conf.d/default.conf/etc/nginx/sites-enabled/0-default 有另一个配置文件,其中有一个listen 指令和default_server 集。这将捕获这些请求并提供“欢迎使用 nginx!”。页面。

我建议您查找该文件并将其删除,这应该可以解决问题。

不过,您也可以简化上述配置,只需:

server 
    listen 80;
    server_name localhost;
    location / 
        include proxy_params;
        proxy_pass http://unix:/home/datascience/chatbot-cima/chatbot.sock;
    

如果没有另一个 server 块隐藏在配置中的其他位置并带有类似 listen 80 default_server; 的指令,那么这应该会捕获所有请求。

欲了解更多信息,请参阅:How nginx processes a request

【讨论】:

以上是关于Ngrok 没有正确地隧道 Nginx的主要内容,如果未能解决你的问题,请参考以下文章

ngrok 和 docker,无法完成隧道连接

Ngrok 隧道 https 通过配置

如何在 Rails 6 中将我的 Ngrok 隧道动态添加到 config.hosts?

使用 ngrok 将 SPFX WebPart 隧道传输到 BrowserStack

Git over ngrok 隧道转发

启动 ngrok HTTP 隧道,但只转发到 HTTP 或 HTTPS,而不是两者