Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/326.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 烧瓶+;阿帕奇(mod#u wsgi)和x2B;boto3:name';ssl';没有定义_Python_Apache_Flask_Mod Wsgi_Boto3 - Fatal编程技术网

Python 烧瓶+;阿帕奇(mod#u wsgi)和x2B;boto3:name';ssl';没有定义

Python 烧瓶+;阿帕奇(mod#u wsgi)和x2B;boto3:name';ssl';没有定义,python,apache,flask,mod-wsgi,boto3,Python,Apache,Flask,Mod Wsgi,Boto3,我正在尝试构建一个RESTAPI来监视AWSEC2服务上实例的状态。当我使用Apache上托管的Flask应用程序时,我得到一个回溯,通知名称“ssl”未定义 为了查看我的应用程序有什么问题,我使用调试模式在独立服务器(仅限于Flask)上运行了它。令我惊讶的是,该应用程序成功运行 我的烧瓶应用程序(Flask_endpoint.py) 在没有Apache的情况下运行时产生的输出 [ { "state": "running", "private_ip":

我正在尝试构建一个RESTAPI来监视AWSEC2服务上实例的状态。当我使用Apache上托管的Flask应用程序时,我得到一个回溯,通知名称“ssl”未定义

为了查看我的应用程序有什么问题,我使用调试模式在独立服务器(仅限于Flask)上运行了它。令我惊讶的是,该应用程序成功运行

我的烧瓶应用程序(Flask_endpoint.py)

在没有Apache的情况下运行时产生的输出

[
    {
        "state": "running",
        "private_ip": "172.31.56.153",
        "instance_type": "t2.micro"
    }
]
带有截断回溯的Apache日志

[Sat Jun 03 11:59:20.217312 2017] [wsgi:info] [pid 3094] [remote 192.168.0.115:50017] mod_wsgi (pid=3094, process='flask_test', application=''): Loading WSGI script '/var/www/siase/middleend/rest/cmd_server_wsgi.py'.
[Sat Jun 03 11:59:20.827295 2017] [wsgi:error] [pid 3094] [remote 192.168.0.115:50017] mod_wsgi (pid=3094): Exception occurred processing WSGI script '/var/www/siase/middleend/rest/cmd_server_wsgi.py'.
[Sat Jun 03 11:59:20.829915 2017] [wsgi:error] [pid 3094] [remote 192.168.0.115:50017] Traceback (most recent call last):
[Sat Jun 03 11:59:20.830014 2017] [wsgi:error] [pid 3094] [remote 192.168.0.115:50017]   File "/var/www/anaconda3/lib/python3.5/site-packages/flask/app.py", line 2000, in __call__
[Sat Jun 03 11:59:20.830017 2017] [wsgi:error] [pid 3094] [remote 192.168.0.115:50017]     return self.wsgi_app(environ, start_response)
[Sat Jun 03 11:59:20.830022 2017] [wsgi:error] [pid 3094] [remote 192.168.0.115:50017]   File "/var/www/anaconda3/lib/python3.5/site-packages/flask/app.py", line 1991, in wsgi_app
[Sat Jun 03 11:59:20.830024 2017] [wsgi:error] [pid 3094] [remote 192.168.0.115:50017]     response = self.make_response(self.handle_exception(e))
[Sat Jun 03 11:59:20.830027 2017] [wsgi:error] [pid 3094] [remote 192.168.0.115:50017]   File "/var/www/anaconda3/lib/python3.5/site-packages/flask_cors/extension.py", line 161, in wrapped_function
[Sat Jun 03 11:59:20.830029 2017] [wsgi:error] [pid 3094] [remote 192.168.0.115:50017]     return cors_after_request(app.make_response(f(*args, **kwargs)))

** (several lines) **

[Sat Jun 03 11:59:20.830194 2017] [wsgi:error] [pid 3094] [remote 192.168.0.115:50017]     body=body, headers=headers)
[Sat Jun 03 11:59:20.830197 2017] [wsgi:error] [pid 3094] [remote 192.168.0.115:50017]   File "/var/www/anaconda3/lib/python3.5/site-packages/botocore/vendored/requests/packages/urllib3/connectionpool.py", line 341, in _make_request
[Sat Jun 03 11:59:20.830199 2017] [wsgi:error] [pid 3094] [remote 192.168.0.115:50017]     self._validate_conn(conn)
[Sat Jun 03 11:59:20.830202 2017] [wsgi:error] [pid 3094] [remote 192.168.0.115:50017]   File "/var/www/anaconda3/lib/python3.5/site-packages/botocore/vendored/requests/packages/urllib3/connectionpool.py", line 761, in _validate_conn
[Sat Jun 03 11:59:20.830204 2017] [wsgi:error] [pid 3094] [remote 192.168.0.115:50017]     conn.connect()
[Sat Jun 03 11:59:20.830207 2017] [wsgi:error] [pid 3094] [remote 192.168.0.115:50017]   File "/var/www/anaconda3/lib/python3.5/site-packages/botocore/vendored/requests/packages/urllib3/connection.py", line 206, in connect
[Sat Jun 03 11:59:20.830209 2017] [wsgi:error] [pid 3094] [remote 192.168.0.115:50017]     resolved_cert_reqs = resolve_cert_reqs(self.cert_reqs)
[Sat Jun 03 11:59:20.830213 2017] [wsgi:error] [pid 3094] [remote 192.168.0.115:50017]   File "/var/www/anaconda3/lib/python3.5/site-packages/botocore/vendored/requests/packages/urllib3/util/ssl_.py", line 157, in resolve_cert_reqs
[Sat Jun 03 11:59:20.830216 2017] [wsgi:error] [pid 3094] [remote 192.168.0.115:50017]     res = getattr(ssl, candidate, None)
[Sat Jun 03 11:59:20.830230 2017] [wsgi:error] [pid 3094] [remote 192.168.0.115:50017] NameError: name 'ssl' is not defined
这是我的wsgi文件

# -*- coding: utf-8 -*-

import sys

APP_MODULE_PATH = '/var/www/siase/middleend'

if APP_MODULE_PATH not in sys.path:
    sys.path.insert(0, APP_MODULE_PATH)

from rest.cmd_server import WEBAPP as application
application.debug = True
这是我的.conf文件

<VirtualHost *:8080>

    ServerName localhost
    ServerAdmin administrator@localhost

    DocumentRoot /var/www/siase/middleend

    WSGIDaemonProcess flask_test user=studioapp group=www-data lang='en_US.UTF-8' locale='en_US.UTF-8' threads=20 processes=4 python-path=/var/www/anaconda3/lib/python3.5
    WSGIScriptAlias / /var/www/siase/middleend/rest/cmd_server_wsgi.py
    <Directory /var/www/siase/middleend>
        WSGIProcessGroup flask_test
        WSGIApplicationGroup %{GLOBAL}
        Require all granted
        Options -Indexes
    </Directory>

    <Directory "/">
        Options -Indexes
    </Directory>

    LogLevel info
    ErrorLog ${APACHE_LOG_DIR}/flask_test-error.log
    CustomLog ${APACHE_LOG_DIR}/flask_test-access.log combined

</VirtualHost>

服务器名本地主机
服务器管理员administrator@localhost
DocumentRoot/var/www/siase/middleend
WSGIDaemonProcess flask_test user=studioapp group=www-data lang='en_US.UTF-8'locale='en_US.UTF-8'threads=20个进程=4个python路径=/var/www/anaconda3/lib/python3.5
WSGIScriptAlias//var/www/siase/middleend/rest/cmd_server_wsgi.py
WSGI工艺组烧瓶试验
WSGIApplicationGroup%{GLOBAL}
要求所有授权
选项-索引
选项-索引
日志级别信息
ErrorLog${APACHE\u LOG\u DIR}/flask\u test-error.LOG
CustomLog${APACHE\u LOG\u DIR}/flask\u test-access.LOG组合
下面是我当前使用的环境的一些详细信息:

Apache/2.4.7(Ubuntu)
OpenSSL 1.0.1f
mod_wsgi 4.5.5
Python 3.5.2(蟒蛇3-4.2.0)
烧瓶0.11.1

Boto3 1.4.4

如果将mod_ssl模块加载到Apache中,则可能无法使其正常工作。问题是Anaconda一直在提供自己的SSL库,它们与操作系统SSL库不兼容

Apache在加载mod_ssl模块时会拉入操作系统ssl库。然后,在Python web应用程序中,Anaconda不能使用自己的SSL库,而是继承Apache mod_SSL库引入的SSL库。由于它们不兼容,Python中ssl模块的设置失败,因此显示为未加载


唯一的解决方案是使用mod_wsgi-express并将其置于Apache之后,Apache仅作为代理。这样一来,Apache和您的Python web应用程序之间就有了适当的分离。

很抱歉响应太晚。我尝试了你提到的设置,它按预期工作。谢谢你的见解。对我来说,Anaconda将继承ApacheSSL库是一件新鲜事。根据我的理解,Apache.conf文件上的python路径或WSGIPythonPath指令将覆盖此行为。如果您允许,关于您的回答,我还有一个问题:在Flask上使用mod_wsgi-express单独运行有什么好处?SSL库的继承是因为mod_wsgi将Python嵌入到与Apache运行相同的进程中。它是不明确的,因此没有任何process exec二进制文件可以停止对共享库的继承。至于使用mod_wsgi-express而不是Flask,我只能假设您正在谈论Flask内置的wsgi服务器。Flask的内置WSGI服务器仅用于开发,而不是生产级web服务器。所以,使用Flask内置服务器进行开发或真正简单的工作是很好的,但不适合面向公众的网站。
<VirtualHost *:8080>

    ServerName localhost
    ServerAdmin administrator@localhost

    DocumentRoot /var/www/siase/middleend

    WSGIDaemonProcess flask_test user=studioapp group=www-data lang='en_US.UTF-8' locale='en_US.UTF-8' threads=20 processes=4 python-path=/var/www/anaconda3/lib/python3.5
    WSGIScriptAlias / /var/www/siase/middleend/rest/cmd_server_wsgi.py
    <Directory /var/www/siase/middleend>
        WSGIProcessGroup flask_test
        WSGIApplicationGroup %{GLOBAL}
        Require all granted
        Options -Indexes
    </Directory>

    <Directory "/">
        Options -Indexes
    </Directory>

    LogLevel info
    ErrorLog ${APACHE_LOG_DIR}/flask_test-error.log
    CustomLog ${APACHE_LOG_DIR}/flask_test-access.log combined

</VirtualHost>