2
0

fix(uwsgi): Make sure uWSGI talks proper HTTP/1.1 (#499)

This patch brings back the HTTP/1.1 related settings for uWSGI to fix #486 as apparently Relay tries to talk to Sentry Web with keep alives where uWSGI terminates the connection unexpectedly. It also ports some configs for uWSGI and nginx from single-tenant.
This commit is contained in:
Burak Yigit Kaya 2020-05-22 16:12:20 +03:00 committed by GitHub
parent c34484ddbf
commit 9f39e3cea1
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 80 additions and 35 deletions

View File

@ -1,50 +1,73 @@
user nginx; user nginx;
worker_processes 1; worker_processes 1;
error_log /var/log/nginx/error.log warn; error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid; pid /var/run/nginx.pid;
events { events {
worker_connections 1024; worker_connections 1024;
} }
http { http {
default_type application/octet-stream; default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" ' log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" ' '$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"'; '"$http_user_agent" "$http_x_forwarded_for"';
sendfile on; sendfile on;
keepalive_timeout 65; tcp_nopush on;
tcp_nodelay on;
reset_timedout_connection on;
upstream relay { keepalive_timeout 75s;
server relay:3000;
}
upstream sentry { gzip off;
server web:9000; server_tokens off;
}
server { server_names_hash_bucket_size 64;
listen 80; types_hash_max_size 2048;
# use the docker DNS server to resolve ips for relay and sentry containers types_hash_bucket_size 64;
resolver 127.0.0.11 ipv6=off; client_max_body_size 5m;
client_max_body_size 100M;
proxy_redirect off; proxy_http_version 1.1;
proxy_set_header Host $host; proxy_redirect off;
proxy_buffering off;
proxy_next_upstream error timeout invalid_header http_502 http_503 non_idempotent;
proxy_next_upstream_tries 2;
location /api/store/ { # Remove the Connection header if the client sends it,
proxy_pass http://relay; # it could be "close" to close a keepalive connection
} proxy_set_header Connection '';
location ~ ^/api/[1-9]\d*/ { proxy_set_header Host $host;
proxy_pass http://relay; proxy_set_header X-Real-IP $remote_addr;
} proxy_set_header X-Forwarded-For $remote_addr;
location / { proxy_set_header X-Forwarded-Proto $scheme;
proxy_pass http://sentry; proxy_set_header X-Request-Id $request_id;
} proxy_read_timeout 30s;
} proxy_send_timeout 5s;
upstream relay {
server relay:3000;
}
upstream sentry {
server web:9000;
}
server {
listen 80;
location /api/store/ {
proxy_pass http://relay;
}
location ~ ^/api/[1-9]\d*/ {
proxy_pass http://relay;
}
location / {
proxy_pass http://sentry;
}
}
} }

View File

@ -155,8 +155,30 @@ SENTRY_DIGESTS = "sentry.digests.backends.redis.RedisBackend"
SENTRY_WEB_HOST = "0.0.0.0" SENTRY_WEB_HOST = "0.0.0.0"
SENTRY_WEB_PORT = 9000 SENTRY_WEB_PORT = 9000
SENTRY_WEB_OPTIONS = { SENTRY_WEB_OPTIONS = {
# These ase for proper HTTP/1.1 support from uWSGI
# Without these it doesn't do keep-alives causing
# issues with Relay's direct requests.
"http-keepalive": True,
"http-chunked-input": True,
# the number of web workers
'workers': 3,
# Turn off memory reporting
"memory-report": False, "memory-report": False,
# 'workers': 3, # the number of web workers # Some stuff so uwsgi will cycle workers sensibly
'max-requests': 100000,
'max-requests-delta': 500,
'max-worker-lifetime': 86400,
# Duplicate options from sentry default just so we don't get
# bit by sentry changing a default value that we depend on.
'thunder-lock': True,
'log-x-forwarded-for': False,
'buffer-size': 32768,
'limit-post': 209715200,
'disable-logging': True,
'reload-on-rss': 600,
'ignore-sigpipe': True,
'ignore-write-errors': True,
'disable-write-exception': True,
} }
########### ###########