Skip to content

Instantly share code, notes, and snippets.

@zaru
Last active June 12, 2023 02:04
Show Gist options
  • Star 4 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save zaru/82c487c67ee25b55a3bd4c9ba926850c to your computer and use it in GitHub Desktop.
Save zaru/82c487c67ee25b55a3bd4c9ba926850c to your computer and use it in GitHub Desktop.
ngrok + nginx proxy (keep alive)
upstream http_backend {
server example.ngrok.io;
keepalive 128;
}
server {
listen 80 default_server;
listen [::]:80 default_server;
root /var/www/html;
server_name _;
client_max_body_size 20m;
location / {
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Host $http_host;
proxy_set_header Host example.ngrok.io;
proxy_set_header X-CSRF-Token $http_x_csrf_token;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_redirect off;
proxy_http_version 1.1;
proxy_set_header Connection "";
proxy_pass http://http_backend/;
}
}
@vinvin27
Copy link

Hello there :)

I have nginx on my laptop (macosx). Im using ngrok with
ngrok http mydomain.test:80 -host-header=mydomain.test

but when openning the website on remote deskop im getting ERR_NAME_NOT_RESOLVED for all statics (css/js..).

Do you know why?

@Ievis
Copy link

Ievis commented Jun 12, 2023

I can't understand why but implicit proxy_pass via upstream doesn't work for me, so I used direct ngrok url instead. I also use https scheme, so my final configuration file is:

server {
    server_name example.com;

    listen 80;
    listen [::]:80;

    if ($scheme != "https") {
        return 301 https://$host$request_uri;
    } # managed by Certbot

    listen [::]:443 ssl ipv6only=on; # managed by Certbot
    listen 443 ssl; # managed by Certbot
    ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem; # managed by Certbot
    ssl_certificate_key /etc/letsencrypt/live/example.com/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

    location / {
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Host $http_host;
        proxy_set_header Host example.ngrok.io;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_redirect off;
        proxy_http_version 1.1;
        proxy_set_header Connection "";
        proxy_pass https://example.ngrok.io/;
    }
}

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment