gpt4 book ai didi

python - gevent Open Shift 强制 HTTPS

转载 作者:太空宇宙 更新时间:2023-11-03 18:42:00 24 4
gpt4 key购买 nike

我有一个使用 Python 2.7 社区购物车通过 gevent 在 OpenShift 上运行的 web.py 应用程序。我想强制所有连接都通过 https。 OpenShift 上有一个关于使用 apache 执行此操作的很好的教程,但是对于 gevent 呢?

这是我的 app.py,它基本上是 Python 2.7 社区购物车中的默认值:

#!/usr/bin/env python
import imp
import os
import sys

try:
zvirtenv = os.path.join(os.environ['OPENSHIFT_PYTHON_DIR'],
'virtenv', 'bin', 'activate_this.py')
execfile(zvirtenv, dict(__file__ = zvirtenv) )
except IOError:
pass


def run_gevent_server(app, ip, port=8080):
from gevent.pywsgi import WSGIServer
WSGIServer((ip, port), app).serve_forever()


def run_simple_httpd_server(app, ip, port=8080):
from wsgiref.simple_server import make_server
make_server(ip, port, app).serve_forever()


if __name__ == '__main__':
ip = os.environ['OPENSHIFT_PYTHON_IP']
port = int(os.environ['OPENSHIFT_PYTHON_PORT'])
zapp = imp.load_source('application', 'wsgi/application')
# Use gevent if we have it, otherwise run a simple httpd server.
print 'Starting WSGIServer on %s:%d ... ' % (ip, port)
try:
run_gevent_server(zapp.application, ip, port)
except:
print 'gevent probably not installed - using default simple server ...'
run_simple_httpd_server(zapp.application, ip, port)

最佳答案

我建议使用 nginx 终止 SSL (https) 连接和对应用程序的代理请求。这是简单的 nginx 配置

user nginx;
worker_processes 1;

error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;

events {
worker_connections 1024;
}

http {
access_log /var/log/nginx/access.log main;

upstream app_server {
server 127.0.0.1:5001 fail_timeout=0;
}

server {
listen <OPENSHIFT_PYTHON_IP>:<OPENSHIFT_PYTHON_PORT>;
server_name <DOMAIN_NAME>;

ssl on;
ssl_protocols SSLv3 TLSv1;
ssl_ciphers AES128-SHA:AES256-SHA:RC4-SHA:DES-CBC3-SHA:RC4-MD5;
ssl_certificate /etc/nginx/cert.crt;
ssl_certificate_key /etc/nginx/cert.key;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;

location / {
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_redirect off;

proxy_pass http://app_server;
}
}
}

这是我的一台服务器的精简版本(希望我没有丢弃任何必要的东西)。

代理服务器的主要问题是错误的 header ,例如 HOSTREMOTE_ADDR 等。但这种配置,尤其是 proxy_set_header 命令可以帮助大多数 Web 框架找出谁是真正的发送者。

关于python - gevent Open Shift 强制 HTTPS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20319091/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com