# Reverse proxy with subdomain

**URL:** https://dietpi.com/forum/t/reverse-proxy-with-subdomain/14030
**Category:** General Discussion
**Created:** [20 August 2022 03:30 UTC](https://dietpi.com/forum/t/reverse-proxy-with-subdomain/14030 "2022-08-20T03:30:11Z")
**Posts on this page:** 8
**Page:** 1

<div class="post-metadata">

### Author: ![GalileoDot](https://dietpi.com/forum/user_avatar/dietpi.com/galileodot/32/2473_2.png) [@GalileoDot](https://dietpi.com/forum/u/GalileoDot)
#### Post date: [20 August 2022 03:30 UTC](https://dietpi.com/forum/t/reverse-proxy-with-subdomain/14030/1 "2022-08-20T03:30:11Z")

</div>

Hi everyone.

I’m being trying to get subdomains working for the various services I’m planning on using (AdGuard, nextcloud and jellyfin mostly) so I can access them outside the network. I’ve read various posts here and it seems reverse proxy is the way to go. Though I can’t seem to get any of the conf files for nginx working. They all redirect to the nginx page. Is there something I’m doing wrong?

---

<div class="post-metadata">

### Author: ![Joulinar](https://dietpi.com/forum/user_avatar/dietpi.com/joulinar/32/57_2.png) [@Joulinar](https://dietpi.com/forum/u/Joulinar)
#### Post date: [20 August 2022 05:31 UTC](https://dietpi.com/forum/t/reverse-proxy-with-subdomain/14030/2 "2022-08-20T05:31:23Z")

</div>

You could start sharing the configuration files you are using. And do you have activated the configuration?

---

<div class="post-metadata">

### Author: ![GalileoDot](https://dietpi.com/forum/user_avatar/dietpi.com/galileodot/32/2473_2.png) [@GalileoDot](https://dietpi.com/forum/u/GalileoDot)
#### Post date: [20 August 2022 15:53 UTC](https://dietpi.com/forum/t/reverse-proxy-with-subdomain/14030/3 "2022-08-20T15:53:32Z")

</div>

This is for adguard

```auto
location /aghome/ {
    proxy_pass http://127.0.0.1:8083/;
    proxy_redirect / /aghome/;
    proxy_cookie_path / /aghome/;
}

```

And this is for jellyfin

```auto
# Uncomment the commented sections after you have acquired a SSL Certificate
server {
    listen 80;
    listen [::]:80;
    # server_name sub.domain.com;

    # Uncomment to redirect HTTP to HTTPS
    # return 301 https://$host$request_uri;
#}

#server {
    # listen 443 ssl http2;
    # listen [::]:443 ssl http2;
    server_name sub.domain.com;

    ## The default `client_max_body_size` is 1M, this might not be enough for some posters, etc.
    client_max_body_size 20M;

    # use a variable to store the upstream proxy
    # in this example we are using a hostname which is resolved via DNS
    # (if you aren't using DNS remove the resolver line and change the variable to point to an IP address e.g `set $jellyfin 127.0.0.1`)
    set $jellyfin jellyfin;
    resolver 127.0.0.1 valid=30;

    #ssl_certificate /etc/letsencrypt/live/sub.domain.com/fullchain.pem;
    #ssl_certificate_key /etc/letsencrypt/live/sub.domain.comprivkey.pem;
    #include /etc/letsencrypt/options-ssl-nginx.conf;
    #ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;
    #add_header Strict-Transport-Security "max-age=31536000" always;
    #ssl_trusted_certificate /etc/letsencrypt/live/sub.domain.com/chain.pem;
    #ssl_stapling on;
    #ssl_stapling_verify on;

    # Security / XSS Mitigation Headers
    # NOTE: X-Frame-Options may cause issues with the webOS app
    add_header X-Frame-Options "SAMEORIGIN";
    add_header X-XSS-Protection "1; mode=block";
    add_header X-Content-Type-Options "nosniff";

    # Content Security Policy
    # See: https://developer.mozilla.org/en-US/docs/Web/HTTP/CSP
    # Enforces https content and restricts JS/CSS to origin
    # External Javascript (such as cast_sender.js for Chromecast) must be whitelisted.
    # NOTE: The default CSP headers may cause issues with the webOS app
    #add_header Content-Security-Policy "default-src https: data: blob: http://image.tmdb.org; style-src 'self' 'unsafe-inline'; script-src 'self' 'unsafe-inline' https://www.gstatic.com/cv/js/sender/v1/cast_sender.js https://www.gstatic.com/eureka/clank/95/cast_sender.js https://www.gstatic.com/eureka/clank/96/cast_sender.js https://www.gstatic.com/eureka/clank/97/cast_sender.js https://www.youtube.com blob:; worker-src 'self' blob:; connect-src 'self'; object-src 'none'; frame-ancestors 'self'";

    location = / {
        return 302 http://$host/web/;
        #return 302 https://$host/web/;
    }

    location / {
        # Proxy main Jellyfin traffic
        proxy_pass http://$jellyfin:8096;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header X-Forwarded-Protocol $scheme;
        proxy_set_header X-Forwarded-Host $http_host;

        # Disable buffering when the nginx proxy gets very resource heavy upon streaming
        proxy_buffering off;
    }

    # location block for /web - This is purely for aesthetics so /web/#!/ works instead of having to go to /web/index.html/#!/
    location = /web/ {
        # Proxy main Jellyfin traffic
        proxy_pass http://$jellyfin:8096/web/index.html;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header X-Forwarded-Protocol $scheme;
        proxy_set_header X-Forwarded-Host $http_host;
    }

    location /socket {
        # Proxy Jellyfin Websockets traffic
        proxy_pass http://$jellyfin:8096;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header X-Forwarded-Protocol $scheme;
        proxy_set_header X-Forwarded-Host $http_host;
    }
}

```

---

<div class="post-metadata">

### Author: ![Joulinar](https://dietpi.com/forum/user_avatar/dietpi.com/joulinar/32/57_2.png) [@Joulinar](https://dietpi.com/forum/u/Joulinar)
#### Post date: [20 August 2022 20:03 UTC](https://dietpi.com/forum/t/reverse-proxy-with-subdomain/14030/4 "2022-08-20T20:03:30Z")

</div>

for AGH, following was working to me. I did some testing on another topic. Maybe, it could be reused [One IP versus several services, how? - #15 by Joulinar](https://dietpi.com/forum/t/one-ip-versus-several-services-how/14017/15)

For Jellyfin some configuration to be done according to the config file. Did you have done this?

```auto
    # use a variable to store the upstream proxy
    # in this example we are using a hostname which is resolved via DNS
    # (if you aren't using DNS remove the resolver line and change the variable to point to an IP address e.g `set $jellyfin 127.0.0.1`)
    set $jellyfin jellyfin;
    resolver 127.0.0.1 valid=30;

```

---

<div class="post-metadata">

### Author: ![GalileoDot](https://dietpi.com/forum/user_avatar/dietpi.com/galileodot/32/2473_2.png) [@GalileoDot](https://dietpi.com/forum/u/GalileoDot)
#### Post date: [21 August 2022 17:37 UTC](https://dietpi.com/forum/t/reverse-proxy-with-subdomain/14030/5 "2022-08-21T17:37:06Z")

</div>

I tried the one you linked and I got AdGuard working on [domain.com/aghome](http://domain.com/aghome) but not [sub.domain.com](http://sub.domain.com)

I had to change the for https from 443 to 4443 to stop getting the error so I don’t know if the reverse proxy is working?

Yes I have the same lines in the jellyfin config but no dice.

---

<div class="post-metadata">

### Author: ![Joulinar](https://dietpi.com/forum/user_avatar/dietpi.com/joulinar/32/57_2.png) [@Joulinar](https://dietpi.com/forum/u/Joulinar)
#### Post date: [21 August 2022 19:22 UTC](https://dietpi.com/forum/t/reverse-proxy-with-subdomain/14030/6 "2022-08-21T19:22:14Z")

</div>

> [@GalileoDot](#):
>
> I got AdGuard working on [domain.com/aghome](http://domain.com/aghome) but not [sub.domain.com](http://sub.domain.com)

Did you setup your sub domain as DDNS? Does it have correct IP address assigned?

> [@GalileoDot](#):
>
> change the for https from 443 to 4443

Where did you change this setting? In which configuration file?

> [@GalileoDot](#):
>
> Yes I have the same lines in the jellyfin config but no dice.

That’s exactly the point. You need to adjust this section to fit to your system as written on the comments within the code section.

---

<div class="post-metadata">

### Author: ![PipsPi](https://dietpi.com/forum/user_avatar/dietpi.com/pipspi/32/2544_2.png) [@PipsPi](https://dietpi.com/forum/u/PipsPi)
#### Post date: [31 August 2022 00:02 UTC](https://dietpi.com/forum/t/reverse-proxy-with-subdomain/14030/7 "2022-08-31T00:02:09Z")

</div>

LightTPD can’t do this can it?

---

<div class="post-metadata">

### Author: ![Joulinar](https://dietpi.com/forum/user_avatar/dietpi.com/joulinar/32/57_2.png) [@Joulinar](https://dietpi.com/forum/u/Joulinar)
#### Post date: [31 August 2022 07:25 UTC](https://dietpi.com/forum/t/reverse-proxy-with-subdomain/14030/8 "2022-08-31T07:25:58Z")

</div>

The OP is running Nginx, therefore lighttpd is not an option as it would be a conflicting web server 😉  
Personally, I find it more complex to configure lighttpd as proxy compared to Nginx and/or Apache
