-
Notifications
You must be signed in to change notification settings - Fork 788
[WIP] Patch NGINX to allow it to better handle SIGTERM #56
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: main
Are you sure you want to change the base?
Conversation
|
nice! :) |
|
I ran this locally but I was getting trouble having it log out on SIGTERM at all - with the Docker Hub vanilla NGINX container it logs out quite a bit of info in debug mode (with the error.log |
|
Also, @chap it looks like the build will pass if we update the changelog, at least based on the comment on that part of the Github check. |
| echo "Downloading $uuid4_url" | ||
| (cd nginx-${NGINX_VERSION} && curl -L $uuid4_url | tar xvz ) | ||
|
|
||
| if [ -d "/buildpack/support/patchfiles/${NGINX_VERSION}" ] |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
| if [ -d "/buildpack/support/patchfiles/${NGINX_VERSION}" ] | |
| if [ -d "/buildpack/scripts/patchfiles/${NGINX_VERSION}" ] |
After compiling nginx with the modifications:
```shell
make build-heroku-18
```
I tested that the changes actually worked:
```shell
apt-get update
apt-get install -y python3-venv
python3 -m venv venv
./venv/bin/pip install gunicorn
FORCE=1 bin/start-nginx
./venv/bin/gunicorn -b unix:/tmp/nginx.socket app:app
# in another terminal (should hang for 15s assuming app is setup correctly)
curl localhost:5000
# in another terminal
# get the PID
ps aux | grep master
# should be graceful, that is nginx should shutdown after it finishes serving the request
kill -TERM $PID
FORCE=1 bin/start-nginx
# should kill nginx without waiting
# curl returns an error:
# curl: (52) Empty reply from server
kill -QUIT $PID
```
The `app` used by `gunicorn` was the hello world with a sleep thrown in
so we mimic a long running request.
```python
import time
def app(environ, start_response):
time.sleep(15)
data = b"Hello, World!\n"
start_response("200 OK", [
("Content-Type", "text/plain"),
("Content-Length", str(len(data)))
])
return iter([data])
```
Based on heroku#56
After compiling nginx with the modifications:
```shell
make build-heroku-18
```
I then tested that the changes actually worked:
```shell
apt-get update
apt-get install -y python3-venv
python3 -m venv venv
./venv/bin/pip install gunicorn
FORCE=1 bin/start-nginx
./venv/bin/gunicorn -b unix:/tmp/nginx.socket app:app
# in another terminal (should hang for 15s assuming app is setup correctly)
curl localhost:5000
# in another terminal
# get the PID
ps aux | grep master
# should be graceful, that is nginx should shutdown after it finishes serving the request
kill -TERM $PID
FORCE=1 bin/start-nginx
# should kill nginx without waiting
# curl returns an error:
# curl: (52) Empty reply from server
kill -QUIT $PID
```
The `app` used by `gunicorn` was the hello world with a sleep thrown in
so we mimic a long running request.
```python
import time
def app(environ, start_response):
time.sleep(15)
data = b"Hello, World!\n"
start_response("200 OK", [
("Content-Type", "text/plain"),
("Content-Length", str(len(data)))
])
return iter([data])
```
Based on heroku#56
Not sure yet if this is going to work, but trying to address the problems raised in #31