mirror of
https://github.com/balkian/balkian.github.com.git
synced 2024-11-14 15:42:28 +00:00
83 lines
1.9 KiB
Markdown
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
|
||
|
```
|