Serveur web Apache et Flacon app
J'ai apache2 serveur web qui tourne sur Ubuntu 14.04.
Par défaut, lorsque je démarre le serveur web apache sur http://localhost
je peux voir "Apache2 Ubuntu par Défaut de la Page" qui est lancé à partir d' /var/www/html/index.html fichier.
J'ai un flacon d'application au /home/ubuntu/myprojects/emplacement. Le flacon application est en cours d'exécution sur virtualenv et avoir une bonne structure de dossiers pour effectuer le rendu d'un fichier html.
Ci-dessous le dossier de la structure
/home/ubuntu/myprojects/hello/hello.py (flacon application de rendu html)
/home/ubuntu/myprojects/hello/templates/hello.html
Le flacon le code de l'application est comme ci-dessous:
from flask import Flask
from flask import render_template
from flask import request
app = Flask(__name__)
@app.route('/')
def my_form():
return render_template("hello.html")
if __name__ == '__main__':
app.debug = True
app.run(host='0.0.0.0')
Quand je lance http://localhost:5000
l'hello.html est rendue.
Je veux rendre hello.html à partir de hello.py flacon application lorsque http://localhost
est appelée sans aucun numéro de port spécifié.
Pour le faire j'ai ajouté le code ci-dessous:
app.run(host='0.0.0.0', port=80)
Mais ensuite, quand je lance le ballon d'application, est existe avec l'erreur:
* Running on http://0.0.0.0:80/ (Press CTRL+C to quit)
Traceback (most recent call last):
File "hello.py", line 21, in <module>
app.run(host='0.0.0.0', port=80)
File "/home/ubuntu/myproject/venv/local/lib/python2.7/site-packages/flask/app.py", line 772, in run
run_simple(host, port, self, **options)
File "/home/ubuntu/myproject/venv/local/lib/python2.7/site-packages/werkzeug/serving.py", line 618, in run_simple
test_socket.bind((hostname, port))
File "/usr/lib/python2.7/socket.py", line 224, in meth
return getattr(self._sock,name)(*args)
socket.error: [Errno 13] Permission denied
Je ne sais pas ce que je fais de mal. Sur http://localhost
, l'index.html à partir de /var/www/html/est d'obtenir le rendu.
En plus de ce qui précède, lorsque j'ai utilisé mod_wsgi j'ai ajouté le code ci-dessous
Ajout de l'application.wsgi
import os, sys, logging
logging.basicConfig(stream=sys.stderr)
PROJECT_DIR = '/home/ubuntu/myproject/hello'
activate_this = os.path.join(PROJECT_DIR, 'bin', 'activate_this.py')
execfile(activate_this, dict(__file__=activate_this))
sys.path.append(PROJECT_DIR)
from hello import app as application
Dans /etc/apache2/sites-available/000-default.conf
, j'ai ajouté ci-dessous:
<VirtualHost *:80>
WSGIDaemonProcess FunRoute user=ubuntu group=root threads=5
WSGIScriptAlias / /home/ubuntu/myproject/FunRoute/application.wsgi
<Directory /home/ubuntu/myproject/FunRoute/>
WSGIProcessGroup FunRoute
WSGIApplicationGroup %{GLOBAL}
Order deny,allow
Allow from all
</Directory>
</VirtualHost>
Aussi j'ai changé le hello.py retour à :
app.run(host='0.0.0.0')
Mais ensuite, j'ai reçu 403 Forbidden
d'erreur lorsque j'essaie de lancer http://localhost
Forbidden
You don't have permission to access /on this server.
Apache/2.4.7 (Ubuntu) Server at 52.8.217.39 Port 80
Vous devez vous connecter pour publier un commentaire.
Pour démarrer le ballon sur le port 80 nécessite les privilèges de root, mais il ne serait pas travailler pour vous dans le cas présent, soit parce que Apache est déjà en cours d'exécution sur ce port, et vous ne pouvez pas (en général) ont deux indépendants des processus à l'écoute sur le même port.
Je suis en supposant que vous voulez faire cela pour le général de test/développement et une façon de le faire est de rendre l'utilisation d'un reverse proxy http qui permet de ne pas avoir à vous soucier de redémarrage d'apache tout le temps quand le code est modifié.
Je vous recommande de commencer l'application sur un port spécifique qui n'est pas 5000; essayez de 8000
Dans votre défaut de la configuration du site (il doit être
/etc/apache2/sites-available/default
), vous pouvez le modifier pour inclure ceci:Ce sera prendre sur la racine de votre site par défaut. Si ce n'est pas souhaitable que vous souhaitez définir un distinct virtualhost (idéalement dans un fichier séparé) et ensuite appeler
a2ensite <filename>
. Aussi pour la configuration ci-dessus fonctionne, vous aurez également besoin d'appelera2enmod proxy_http
. Ces deux commande nécessite les privilèges de root.Pour la production, l'utilisation, vous voudrez probablement utiliser quelque chose comme
mod_wsgi
, vous pouvez consulter la liste des questions sur le volet pour vous aider à obtenir commencé./var/log/apache2/error.log
et de voir ce qui pourrait être à l'origine de ce 403.AH01630: client denied by server configuration: /home/ubuntu/myproject/hello/application.wsgi
Après un peu de recherche sur google je l'ai résolu.
Apache 2.4 et au-dessus de sécurité supplémentaires ont permis, où la syntaxe a changé:
De Apache 2.2 si nous voulons permettre à un dossier pour être accessible, par exemple, les fichiers du site, puis nous donnons ci-dessous les options:
Mais dans le cas d'Apache 2.4, nous avons besoin de donner ci-dessous option:
Cela m'a permis l'accès et 403 forbidden erreur a été résolu et aussi mod_wsgi m'a aidé à créer un flacon app, je peux accéder via
http://localhost
et pashttp://localhost:5000