1. My Caddy version (caddy version
):
v2.0.0-beta.20 h1:oUNG1uh0UV8LWLlAVDZolFzk112++V/pxY+fF0HLmlY=
2. How I run Caddy:
Just testing so sudo caddy run
for now or when using caddyfile, sudo caddy run --config ~/caddy/Caddyfile
a. System environment:
Ubuntu 18.04
d. My complete Caddyfile or JSON config:
I have been trying both:
Caddyfile
localhost {
reverse_proxy /weather/* localhost:3010 {
header_up Host {host}
header_up X-Real-IP {remote_host}
header_up X-Forwarded-For {remote_host}
header_up X-Forwarded-Proto {scheme}
}
reverse_proxy /ptz/* localhost:3006 {
header_up Host {host}
header_up X-Real-IP {remote_host}
header_up X-Forwarded-For {remote_host}
header_up X-Forwarded-Proto {scheme}
}
reverse_proxy /liveview/* localhost:3004 {
header_up Host {host}
header_up X-Real-IP {remote_host}
header_up X-Forwarded-For {remote_host}
header_up X-Forwarded-Proto {scheme}
}
reverse_proxy /archive/* localhost:3003 {
header_up Host {host}
header_up X-Real-IP {remote_host}
header_up X-Forwarded-For {remote_host}
header_up X-Forwarded-Proto {scheme}
}
reverse_proxy /alarms/* localhost:3002 {
header_up Host {host}
header_up X-Real-IP {remote_host}
header_up X-Forwarded-For {remote_host}
header_up X-Forwarded-Proto {scheme}
}
reverse_proxy /web_app_socket/* localhost:3001 {
header_up Host {host}
header_up X-Real-IP {remote_host}
header_up X-Forwarded-For {remote_host}
header_up X-Forwarded-Proto {scheme}
}
reverse_proxy /* localhost:3001 {
header_up Host {host}
header_up X-Real-IP {remote_host}
header_up X-Forwarded-For {remote_host}
header_up X-Forwarded-Proto {scheme}
}
}
JSON Config file
{
"apps": {
"http": {
"servers": {
"intelliview": {
"listen": [":443"],
"routes": [
{
"handle": [
{
"handler": "reverse_proxy",
"health_checks": {
"active": {
"expect_status": 2,
"path": "/web_app_socket/"
}
},
"transport": {
"protocol": "http",
"read_buffer_size": 4096
},
"upstreams": [
{
"dial": "localhost:3001"
}
]
},
{
"handler": "reverse_proxy",
"health_checks": {
"active": {
"expect_status": 2,
"path": "/console_socket/"
}
},
"transport": {
"protocol": "http",
"read_buffer_size": 4096
},
"upstreams": [
{
"dial": "localhost:3001"
}
]
},
{
"handler": "reverse_proxy",
"health_checks": {
"active": {
"expect_status": 2,
"path": "/console_socket/"
}
},
"transport": {
"protocol": "http",
"read_buffer_size": 4096
},
"upstreams": [
{
"dial": "localhost:3001"
}
]
},
{
"handler": "reverse_proxy",
"health_checks": {
"active": {
"expect_status": 2,
"path": "/alarms/"
}
},
"transport": {
"protocol": "http",
"read_buffer_size": 4096
},
"upstreams": [
{
"dial": "localhost:3002"
}
]
},
{
"handler": "reverse_proxy",
"health_checks": {
"active": {
"expect_status": 2,
"path": "/analytics/"
}
},
"transport": {
"protocol": "http",
"read_buffer_size": 4096
},
"upstreams": [
{
"dial": "localhost:3005"
}
]
},
{
"handler": "reverse_proxy",
"health_checks": {
"active": {
"expect_status": 2,
"path": "/archive/"
}
},
"transport": {
"protocol": "http",
"read_buffer_size": 4096
},
"upstreams": [
{
"dial": "localhost:3003"
}
]
},
{
"handler": "reverse_proxy",
"health_checks": {
"active": {
"expect_status": 2,
"path": "/liveview/"
}
},
"transport": {
"protocol": "http",
"read_buffer_size": 4096
},
"upstreams": [
{
"dial": "localhost:3004"
}
]
},
{
"handler": "reverse_proxy",
"health_checks": {
"active": {
"expect_status": 2,
"path": "/ptz/"
}
},
"transport": {
"protocol": "http",
"read_buffer_size": 4096
},
"upstreams": [
{
"dial": "localhost:3006"
}
]
},
{
"handler": "reverse_proxy",
"health_checks": {
"active": {
"expect_status": 2,
"path": "/weather/"
}
},
"transport": {
"protocol": "http",
"read_buffer_size": 4096
},
"upstreams": [
{
"dial": "localhost:3010"
}
]
},
{
"handler": "reverse_proxy",
"health_checks": {
"active": {
"expect_status": 2,
"path": "/"
}
},
"transport": {
"protocol": "http",
"read_buffer_size": 4096
},
"upstreams": [
{
"dial": "localhost:3001"
}
]
}
],
"match": [{
"host": [
"localhost"
]
}]
}
]
}
}
}
}
}
3. The problem I’m having:
Trying to convert NGINX config to something that works with Caddy. I was tasked 2 days to research. I have been playing around. I got to point where website (SPA) uploads to browser, but api calls and websockets (socket.io) are not working.
Here is the NGINX config:
map $http_upgrade $connection_upgrade {
default upgrade;
'' close;
}
########### Upstreams ###########
upstream web_app {
ip_hash;
server localhost:3001;
}
upstream alarms {
ip_hash;
server localhost:3002;
}
upstream analytics {
ip_hash;
server localhost:3005;
}
upstream archive {
ip_hash;
server localhost:3003;
}
upstream liveview {
ip_hash;
server localhost:3004;
}
upstream ptz {
ip_hash;
server localhost:3006;
}
upstream weather {
ip_hash;
server localhost:3010;
}
# upstreams
include sites-available/*.upstream;
server {
############# s0 on port 80 (HTTP) #############
listen 80;
listen [::]:80;
server_name _;
charset utf-8;
gzip on;
gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;
gzip_min_length 1000;
gzip_proxied any;
############ include all dynamically created configs ##############
include sites-available/*.conf;
location / {
proxy_pass http://web_app/;
#HTTP version 1.1 is needed for sockets
proxy_set_header Host $host;
proxy_set_header Referer $http_referer;
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-NginX-Proxy true;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
proxy_read_timeout 600s;
proxy_connect_timeout 600s;
}
############## socket for web server communications ###############
location /web_app_socket/ { ### route the websockets of the web app
#Configure proxy to pass data to upstream node1
proxy_pass http://web_app/web/socket.io/;
#HTTP version 1.1 is needed for sockets
proxy_set_header Host $host;
proxy_set_header Referer $http_referer;
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-NginX-Proxy true;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
proxy_read_timeout 600s;
proxy_connect_timeout 600s;
}
location /console_socket/ { ### route the websockets of the web app
#Configure proxy to pass data to upstream node1
proxy_pass http://web_app/console/socket.io/;
#HTTP version 1.1 is needed for sockets
proxy_set_header Host $host;
proxy_set_header Referer $http_referer;
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-NginX-Proxy true;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
proxy_read_timeout 600s;
proxy_connect_timeout 600s;
}
location /alarms/ {
#Configure proxy to pass data to upstream node1
proxy_pass http://alarms/socket.io/;
#HTTP version 1.1 is needed for sockets
proxy_http_version 1.1;
proxy_set_header Host $host;
proxy_set_header Referer $http_referer;
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-NginX-Proxy true;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
proxy_read_timeout 600s;
proxy_connect_timeout 600s;
}
location /analytics/ {
#Configure proxy to pass data to upstream node1
proxy_pass http://analytics/socket.io/;
#HTTP version 1.1 is needed for sockets
proxy_http_version 1.1;
proxy_set_header Host $host;
proxy_set_header Referer $http_referer;
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-NginX-Proxy true;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
proxy_read_timeout 600s;
proxy_connect_timeout 600s;
}
location /archive/ {
#Configure proxy to pass data to upstream node1
proxy_pass http://archive/socket.io/;
#HTTP version 1.1 is needed for sockets
proxy_http_version 1.1;
proxy_set_header Host $host;
proxy_set_header Referer $http_referer;
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-NginX-Proxy true;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
proxy_read_timeout 600s;
proxy_connect_timeout 600s;
}
location /liveview/ {
#Configure proxy to pass data to upstream node1
proxy_pass http://liveview/;
#HTTP version 1.1 is needed for sockets
proxy_http_version 1.1;
proxy_set_header Host $host;
proxy_set_header Referer $http_referer;
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-NginX-Proxy true;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
proxy_read_timeout 600s;
proxy_connect_timeout 600s;
}
location /ptz/ {
#Configure proxy to pass data to upstream node1
proxy_pass http://ptz/socket.io/;
#HTTP version 1.1 is needed for sockets
proxy_http_version 1.1;
proxy_set_header Host $host;
proxy_set_header Referer $http_referer;
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-NginX-Proxy true;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
proxy_read_timeout 600s;
proxy_connect_timeout 600s;
}
location /weather/ {
#Configure proxy to pass data to upstream node1
proxy_pass http://weather/socket.io/;
#HTTP version 1.1 is needed for sockets
proxy_http_version 1.1;
proxy_set_header Host $host;
proxy_set_header Referer $http_referer;
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-NginX-Proxy true;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
proxy_read_timeout 600s;
proxy_connect_timeout 600s;
}
}
The hope is to get something that works with the JSON. We want to be able to reverse_proxy dynamically to upstream servers. Currently, we write NGINX files and restart the server to do this. We also want HTTPS as our default, which we have had issues with NGINX and our websocket connections (they stop without error notification).
Any help, or getting me on the right track, would be appreciated…
Thanks,
Jeff