Skip to content

Instantly share code, notes, and snippets.

@jgwerner
Last active July 14, 2017 10:16
Show Gist options
  • Save jgwerner/526c9597354620124793d9e7a14f2477 to your computer and use it in GitHub Desktop.
Save jgwerner/526c9597354620124793d9e7a14f2477 to your computer and use it in GitHub Desktop.
openresty-nginx.conf.
worker_processes auto;
error_log /dev/stdout debug;
events {
worker_connections 2048;
}
http {
upstream flaskserver {
ip_hash;
server app;
}
upstream logspout {
ip_hash;
server logspout;
}
upstream notificationsserver {
ip_hash;
server notifications-server:3000;
}
server {
listen 80;
server_name _;
# return 301 https://go.3blades.io$request_uri;
ssl off;
# set client body size to 30M #
client_max_body_size 30M;
client_body_buffer_size 10M;
server_tokens off;
location ~* /server/ips/(?<serverId>[a-zA-Z0-9]+) {
set $target "";
internal;
default_type 'text/plain';
proxy_pass http://flaskserver;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
set $url_ips '/api/servers/$serverId';
content_by_lua_block {
local res = ngx.location.capture(ngx.var.url_ips)
local cjson = require "cjson"
local value = cjson.decode(res.body)
if res.status ~= 200 then
ngx.status = res.status
ngx.exit(ngx.HTTP_OK)
else
ngx.print(value.server)
end
}
}
location ~* /server/containerName/(?<serverId>[a-zA-Z0-9]+) {
set $target "";
internal;
default_type 'text/plain';
proxy_pass http://flaskserver;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
set $url_ips '/api/servers/$serverId';
content_by_lua_block {
local res = ngx.location.capture(ngx.var.url_ips)
local cjson = require "cjson"
local value = cjson.decode(res.body)
if res.status ~= 200 then
ngx.status = res.status
ngx.exit(ngx.HTTP_OK)
else
ngx.print(value.container_name)
end
}
}
location / {
proxy_connect_timeout 1200;
proxy_send_timeout 1200;
proxy_read_timeout 1200;
send_timeout 1200;
proxy_set_header X-Forwarded-Proto https;
proxy_set_header X-Forwarded-Host $http_host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://flaskserver/;
}
location /socket.io {
proxy_pass http://notificationsserver/socket.io;
proxy_redirect off;
proxy_buffering off;
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_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "Upgrade";
}
location ~* /(?<serverType>(workspace|model))/(?<workspaceId>[a-zA-Z0-9]+) {
proxy_ignore_client_abort off;
default_type 'text/plain';
set $url_ips '/server/ips/$workspaceId';
set $server "";
rewrite_by_lua_block {
local res = ngx.location.capture(ngx.var.url_ips)
if res.status == 404 then
if ngx.var.serverType == 'model' then
local cjson = require "cjson"
local response = {
schema_version = "0.1",
model_version = "1.0",
timestamp = os.date("%Y-%m-%dT%TZ", os.time()),
status = "error",
reason = "model does not exist or is not running"
}
local resp_text = cjson.encode(response)
ngx.header['content-type'] = 'application/json; charset=utf-8'
ngx.status = 404
ngx.print(resp_text)
ngx.exit(ngx.HTTP_OK)
else
ngx.status = 404
ngx.exit(ngx.HTTP_OK)
end
else
ngx.var.server = res.body
end
}
proxy_pass http://$server/container/$3/tree?$query_string;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $http_host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-NginX-Proxy true;
proxy_set_header Origin "";
# WebSocket support
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_read_timeout 186400;
}
location ~* /(?<serverType>(workspace|model))/(?<workspaceId>[a-zA-Z0-9]+)/(?<rootPath>[a-zA-Z0-9]+) {
proxy_ignore_client_abort off;
default_type 'text/plain';
set $url_ips '/server/ips/$workspaceId';
set $server "";
rewrite_by_lua_block {
local res = ngx.location.capture(ngx.var.url_ips)
if res.status == 404 then
if ngx.var.serverType == 'model' then
local cjson = require "cjson"
local response = {
schema_version = "0.1",
model_version = "1.0",
timestamp = os.date("%Y-%m-%dT%TZ", os.time()),
status = "error",
reason = "model does not exist or is not running"
}
local resp_text = cjson.encode(response)
ngx.header['content-type'] = 'application/json; charset=utf-8'
ngx.status = 404
ngx.print(resp_text)
ngx.exit(ngx.HTTP_OK)
else
ngx.status = 404
ngx.exit(ngx.HTTP_OK)
end
else
ngx.var.server = res.body
end
}
proxy_pass http://$server/container/$3/$4?$query_string;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $http_host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-NginX-Proxy true;
proxy_set_header Origin "";
# WebSocket support
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_read_timeout 186400;
}
location ~* /server/logs/(?<serverId>[a-zA-Z0-9]+) {
set $container "";
set $url_ips '/server/containerName/$serverId';
rewrite_by_lua_block {
local res = ngx.location.capture(ngx.var.url_ips)
ngx.var.container = res.body
}
proxy_pass http://logspout/ws-plain/name:$container;
proxy_redirect off;
proxy_buffering off;
proxy_buffer_size 16k;
proxy_buffers 16 16k;
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_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "Upgrade";
proxy_cache_bypass 1;
proxy_no_cache 1;
}
location ~* /container/(?<workspaceId>[a-zA-Z0-9]+) {
set $server "";
set $url_ips '/server/ips/$workspaceId';
rewrite_by_lua_block {
local res = ngx.location.capture(ngx.var.url_ips)
ngx.var.server = res.body
}
proxy_pass http://$server;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $http_host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-NginX-Proxy true;
proxy_set_header Origin "";
# WebSocket support
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_read_timeout 186400;
}
location ~* /container/(?<workspaceId>[a-zA-Z0-9]+)/api/ {
set $server "";
set $url_ips '/server/ips/$workspaceId';
rewrite_by_lua_block {
local res = ngx.location.capture(ngx.var.url_ips)
ngx.var.server = res.body
}
proxy_pass http://$server;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $http_host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-NginX-Proxy true;
proxy_set_header Origin "";
# WebSocket support
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_read_timeout 186400;
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment