HTTP Proxying
最后更新于:2022-04-01 04:07:50
# HTTP Proxying
Many people prefer using a standalone Python HTTP server and proxying thatserver via nginx, Apache etc.
A very stable Python server is CherryPy. This part of the documentationshows you how to combine your WSGI application with the CherryPy WSGIserver and how to configure the webserver for proxying.
### Creating a .py server
To run your application you need a start-server.py file that starts upthe WSGI Server.
It looks something along these lines:
~~~
from cherrypy import wsgiserver
from yourapplication import make_app
server = wsgiserver.CherryPyWSGIServer(('localhost', 8080), make_app())
try:
server.start()
except KeyboardInterrupt:
server.stop()
~~~
If you now start the file the server will listen on localhost:8080. Keepin mind that WSGI applications behave slightly different for proxied setups.If you have not developed your application for proxying in mind, you canapply the [ProxyFix](# "werkzeug.contrib.fixers.ProxyFix") middleware.
### Configuring nginx
As an example we show here how to configure nginx to proxy to the server.
The basic nginx configuration looks like this:
~~~
location / {
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://127.0.0.1:8080;
proxy_redirect default;
}
~~~
Since Nginx doesn't start your server for you, you have to do it by yourself. Youcan either write an init.d script for that or execute it inside a screensession:
~~~
$ screen
$ python start-server.py
~~~