Basis is Dokku:
upstream $APP {
server 127.0.0.1:$PORT;
}
server {
listen [::]:80;
listen 80;
server_name $hostname;
location / {
proxy_pass http://$APP;
proxy_http_version 1.1;
proxy_set_header Upgrade \$http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host \$http_host;
proxy_set_header X-Forwarded-Proto \$scheme;
proxy_set_header X-Forwarded-For \$remote_addr;
proxy_set_header X-Forwarded-Port \$server_port;
proxy_set_header X-Request-Start \$msec;
}
}
Sample lowest-level usage in gem:
upstream = NginxConfigMaker::Upstream.new(
name: "app_123",
host: "127.0.0.1",
port: "12380",
)
server = NginxConfigMaker::Server.new(
listen: ["[::]:80", "80"],
server_name: "app_123",
location: [
"/",
proxy: {
pass: "http://app_123",
http_version: "1.1",
set_headers: {
"Upgrade": "\$http_upgrade",
"Connection": "upgrade",
"Host": "\$http_host",
"X-Forwarded-Proto": "\$scheme",
"X-Forwarded-For": "\$remote_addr",
"X-Forwarded-Port": "\$server_port",
"X-Request-Start": "\$msec",
}
}
]
)
This will most likely be wrapped by a ruby script in AppExpress:
class GenerateNginxConfigFile
def execute(opts={})
app_name = opts.fetch(:app_name)
host = opts.fetch(:host)
port = opts.fetch(:port)
upstream = NginxConfigMaker::Upstream.new(
name: app_name,
host: host,
port: port,
)
server = NginxConfigMaker::Server.new(
...
)
[upstream, server].join("\n")
end
end