首页 > 解决方案 > Apache 上的 Flask 应用程序无法访问网络

问题描述

我有一个简单的 Flask 应用程序,它托管一个用于将数据输入到本地数据库的表单。我正在使用 python zeep 验证具有 wdsl 服务的字段之一(只需使用http://ec.europa.eu/taxation_customs/vies/checkVatService.wsdl检查增值税是否存在)应用程序服务器位于公司代理后面。http_proxy 和 https_proxy 都已设置。wdsl 服务在测试时按预期返回数据(本地主机,或直接使用 python 运行验证功能)当我使用 Apache2 运行应用程序时,突然网络无法访问。我相信我在 Flaskapp.conf 中遗漏了一些配置,这些配置将通过公司代理路由流量。有人可以在这里帮助/指导我吗?谢谢你。

urllib3 错误:

File "/home/administrator/v_env/flaskapp/lib/python3.6/site-packages/urllib3/connection.py", line 170, in _new_conn
(self._dns_host, self.port), self.timeout, **extra_kw
File "/home/administrator/v_env/flaskapp/lib/python3.6/site-packages/urllib3/util/connection.py", line 96, in create_connection
raise err
File "/home/administrator/v_env/flaskapp/lib/python3.6/site-packages/urllib3/util/connection.py", line 86, in create_connection
sock.connect(sa)
OSError: [Errno 101] Network is unreachable 

Flaskapp.conf

<VirtualHost *:80>
                ServerName $stationIP
                ServerAdmin name@domain.com
                WSGIScriptAlias / /var/www/FlaskApp/flaskapp.wsgi
                <Directory /var/www/FlaskApp/FlaskApp/>
                        Order allow,deny
                        Allow from all
                </Directory>
                Alias /static /var/www/FlaskApp/FlaskApp/static
                <Directory /var/www/FlaskApp/FlaskApp/static/>
                        Order allow,deny
                        Allow from all
                </Directory>
                ErrorLog ${APACHE_LOG_DIR}/error.log
                LogLevel warn
                CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

验证函数

    def validate_vat(self, vat):
        transport = Transport(timeout=10)
        try:
            client = Client('http://ec.europa.eu/taxation_customs/vies/checkVatService.wsdl', transport=transport)
            client.transport.session.proxies = {'http':'http://<proxy.server.com>:9090'}
            response = client.service.checkVat(vat.data[0:2].upper(), vat.data[2:])
        except:
            raise wtforms.validators.ValidationError('VAT validation service unavailable. Please try again later')

        if not response.valid:
            raise wtforms.validators.ValidationError('Not a valid VAT')

标签: pythonapacheflaskurllib3zeep

解决方案


/etc/apache2/envvars通过添加配置 Apache2 槽 来export http_proxy='<your_proxy>:<port>'解决此问题。


推荐阅读