1
0
mirror of https://github.com/balkian/balkian.github.com.git synced 2024-09-21 16:11:41 +00:00
balkian.github.com/content/post/2014-10-09-proxies.md
J. Fernando Sánchez 7c3fb50312 Move to Hugo
2019-01-10 20:26:53 +01:00

83 lines
1.9 KiB
Markdown

---
title: Proxies with Apache and python
date: 2014-10-09 10:00:00
tags:
- python
- apache
- proxy
- gunicorn
- uwsgi
---
This is a quick note on proxying a local python application (e.g. flask)
to a subdirectory in Apache. This assumes that the file wsgi.py contains
a WSGI application with the name *application*. Hence, wsgi:application.
Gunicorn
--------
```apache
<Location /myapp/>
ProxyPass http://127.0.0.1:8888/myapp/
ProxyPassReverse http://127.0.0.1:8888/myapp/
RequestHeader set SCRIPT_NAME "/myapp/"
</Location>
```
<!--more-->
**Important**: *SCRIPT_NAME* and the end of *ProxyPass* URL **MUST BE
THE SAME**. Otherwise, Gunicorn will fail miserably.
Try it with:
```bash
venv/bin/gunicorn -w 4 -b 127.0.0.1:8888 --log-file - --access-logfile - wsgi:application
```
UWSGI
-----
This is a very simple configuration. I will try to upload one with more
options for uwsgi (in a .ini file).
```apache
<Location /myapp/>
SetHandler uwsgi_handler
uWSGISocker 127.0.0.1:8888
</Location>
```
Try it with:
```bash
uwsgi --socket 127.0.0.1:8888 -w wsgi:application
```
### Extra: Supervisor
If everything went as expected, you can wrap your command in a
supervisor config file and let it handle the server for you.
```ini
[unix_http_server]
file=/tmp/myapp.sock ; path to your socket file
[supervisord]
logfile = %(here)s/logs/supervisor.log
childlogdir = %(here)s/logs/
[rpcinterface:supervisor]
supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface
[supervisorctl]
logfile = %(here)s/logs/supervisorctl.log
serverurl=unix:///tmp/supervisor.sock ; use a unix:// URL for a unix socket
[program:myapp]
command = venv/bin/gunicorn -w 4 -b 0.0.0.0:5000 --log-file %(here)s/logs/gunicorn.log --access-logfile - wsgi:application
directory = %(here)s
environment = PATH=%(here)s/venv/bin/
logfile = %(here)s/logs/myapp.log
```