16

I have a website with docker and I use caddy for production. This is my configuration on my Caddyfile

mydomain.com {
    proxy / django:5000 {
        header_upstream Host {host}
        header_upstream X-Real-IP {remote}
        header_upstream X-Forwarded-Proto {scheme}
        header_upstream X-CSRFToken {~csrftoken}
    }
    log stdout
    errors stdout
    gzip
}

This configuration works well when I use mydomain.com, but when I try to access the server by IP it returns me the following error:

404 Site 156.130.11.8 is not served on this interface

I've tried using *, 156.130.11.8, and :80

* {
    proxy / django:5000...
    ...

156.130.11.8 {
    proxy / django:5000...
    ...

None of this is working either, does anyone of you know how can I solve this?

EDIT: The code is here: https://github.com/maguayo/django-starter-api Caddy configuration is under compose/production/caddy/ also the configuration I am running is on "production.yml"

Marcos Aguayo
  • 6,840
  • 8
  • 28
  • 61

2 Answers2

5

According to these tutorials:

https://www.digitalocean.com/community/tutorials/how-to-host-a-website-with-caddy-on-ubuntu-16-04

https://www.booleanworld.com/host-website-caddy-web-server-linux/

https://caddyserver.com/docs/caddyfile-tutorial

your Caddy server should serve the website on your ip using port 80 using one of the follwing configurations:

* {
    proxy / django:5000...
    ...

156.130.11.8 {
    proxy / django:5000...
    ...

:80 {
    proxy / django:5000...
    ...

http:// {
    proxy / django:5000...
    ...

Maybe http://156.130.11.8 { proxy / django:5000 ... } will do the job. Also try to use localhost instead of the ip address like this:

localhost {
    proxy / django:5000...
    ...
}

http://localhost {
    proxy / django:5000...
    ...
}

Good luck!

cameck
  • 2,058
  • 20
  • 32
Marvin Klar
  • 1,869
  • 3
  • 14
  • 32
1

Is it possible that your Django settings.py only has the mydomain.com as allowed host and not the IP? That way the server should return something like "is not served on this interface" and it shouldn't when the domain name is used.

I experienced a similar problem some time ago, not with Caddy but Apache also on Ubuntu. It would also explain why changing your Caddy config doesn't solve the problem, as it is correct.

settings.py should have a line like

ALLOWED_HOSTS = [IP, 'mydomain.com']

More on this parameter can be found in the documentation.

halfer
  • 19,824
  • 17
  • 99
  • 186
creyD
  • 1,972
  • 3
  • 26
  • 55
  • My settings have ALLOWED_HOSTS=["*"] :( – Marcos Aguayo Jun 25 '19 at 08:32
  • Ah, my bad. And you didn't find a solution in the meantime? – creyD Jun 25 '19 at 08:34
  • And in your docker config your have the settings to port forward the ports? – creyD Jun 25 '19 at 08:36
  • I am not sure. this is my config: https://github.com/maguayo/django-starter-api/blob/master/production.yml Probably has to do with docker.. – Marcos Aguayo Jun 25 '19 at 08:40
  • When you tried to access the IP address, did you specify the port? If you want you can take a deeper look on [docker networking in the documentation](https://docs.docker.com/config/containers/container-networking/), but as far as I can tell, yours looks pretty solid, as long as someone specifies the port. – creyD Jun 25 '19 at 08:52