2017-01-18 2 views
0

J'ai une application Pyramid envoyée par proxy derrière nginx pour laquelle j'essaie de définir SCRIPT_NAME dans request.environ.Pyramide: comment définir SCRIPT_NAME dans request.environ

J'ai essayé:

  • exporter dans la coquille pserve est en cours d'exécution dans
  • exporter dans la coquille nginx est en cours d'exécution dans
  • définissant dans le fichier de configuration Pyramid
  • manuellement en le réglant sur gevent.wsgi.WSGIServer.environ avant serve_forever()

Les valeurs non standard que je définis à la dernière étape sont disponibles, mais SCRIPT_NAME est toujours vide, ce qui semble indiquer qu'il a été remplacé par un autre emplacement.

Comment puis-je le définir?

Répondre

0

SCRIPT_NAME est défini par le serveur WSGI à la demande. Si votre serveur n'a pas de hook pour le définir (serveuse a un url_prefix=... paramètre) alors vous pouvez facilement ajouter un middleware à l'arrêt de votre pile de middleware qui le définit pour vous. Au lieu d'écrire votre propre middleware personnalisé, vous pouvez également utiliser le middleware de préfixe de collage qui vous permettra d'ajouter au SCRIPT_NAME. Il prend également en charge la substitution wsgi.url_scheme via la traduction de l'en-tête X-Forwarded-Proto qui aidera avec https.

La meilleure façon d'utiliser le middleware est de l'ajouter à votre fichier ini. Il y a quelques bons exemples ici dans la documentation de la serveuse. Je vais en reproduire un ci-dessous juste pour être plus clair. [1]

[app:myapp] 
use = egg:mypackage#myapp 

[filter:paste_prefix] 
use = egg:PasteDeploy#prefix 

[pipeline:main] 
pipeline = 
    paste_prefix 
    myapp 

[server:main] 
use = egg:waitress#main 
listen = 127.0.0.1:8080 

http://docs.pylonsproject.org/projects/waitress/en/latest/#using-behind-a-reverse-proxy

1

Jetez un oeil à repoze.vhm.

Il résout généralement tous mes problèmes d'hébergement virtuel. (subpath, racine virtuelle etc ...). Le plus gros avantage de repoze.vhm est que votre application pyramidale peut rester complètement inconsciente de l'url und path externe. Vous devez cependant faire attention, que vous utilisez request.route_url et d'autres méthodes lors de la génération d'URL pour votre site/application (mais cela devrait être une bonne pratique de toute façon).

https://github.com/repoze/repoze.vhm