<div dir="ltr"><div>Here's an example with SSL enabled:</div><div><br></div>mod_wsgi:<div><div>#!/usr/bin/python2.7</div><div>import os</div><div>import sys</div><div><br></div><div>from oslo_utils import encodeutils</div><div><br></div><div># XXX reduce dependencies</div><div>from glance.cmd.api import main</div><div>import glance_store</div><div>from oslo_config import cfg</div><div>from oslo_log import log as logging</div><div>import oslo_messaging</div><div>import osprofiler.notifier</div><div>import osprofiler.web</div><div><br></div><div>import threading</div><div><br></div><div>from glance.common import config</div><div>from glance.common import exception</div><div>from glance.common import wsgi</div><div>from glance import notifier</div><div><br></div><div>CONF = cfg.CONF</div><div>CONF.import_group("profiler", "glance.common.wsgi")</div><div>logging.register_options(CONF)</div><div><br></div><div>def fail(e):</div><div>    global KNOWN_EXCEPTIONS</div><div>    return_code = KNOWN_EXCEPTIONS.index(type(e)) + 1</div><div>    sys.stderr.write("ERROR: %s\n" % encodeutils.exception_to_unicode(e))</div><div>    sys.exit(return_code)</div><div><br></div><div>if __name__ == "__main__":</div><div>    sys.exit(main())</div><div>else:</div><div>    KNOWN_EXCEPTIONS = (RuntimeError,</div><div>                        exception.WorkerCreationFailure,</div><div>                        glance_store.exceptions.BadStoreConfiguration)</div><div><br></div><div>    try:</div><div>        config_files = cfg.find_config_files(project='glance', prog='glance-api')</div><div>        config.parse_args(default_config_files=config_files)</div><div>        config.set_config_defaults()</div><div>        logging.setup(CONF, 'glance') # XXX</div><div>        notifier.set_defaults()</div></div><div><div>       """Initialize glance store."""</div><div>        glance_store.register_opts(CONF)</div><div>        glance_store.create_stores(CONF)</div><div>        glance_store.verify_default_store()</div><div><br></div><div>        if cfg.CONF.profiler.enabled:</div><div>            _notifier = osprofiler.notifier.create("Messaging",</div><div>                                                   oslo_messaging, {},</div><div>                                                   notifier.get_transport(),</div><div>                                                   "glance", "api",</div><div>                                                   cfg.CONF.bind_host)</div><div>            osprofiler.notifier.set(_notifier)</div><div>            osprofiler.web.enable(cfg.CONF.profiler.hmac_keys)</div><div>        else:</div><div>            osprofiler.web.disable()</div><div><br></div><div>        application = None</div><div>        app_lock = threading.Lock()</div><div><br></div><div>        with app_lock:</div><div>            if application is None:</div><div>                application = config.load_paste_app('glance-api')</div><div>    except KNOWN_EXCEPTIONS as e:</div><div>        fail(e)</div></div><div><br></div><div>-----</div><div><div>import os</div><div>from subprocess import CalledProcessError, check_call, Popen</div><div>import sys</div><div><br></div><div>def httpd(cmd):</div><div>    cmd = ['/usr/apache2/2.4/bin/httpd', '-f',</div><div>           '/var/lib/glance/api-httpd.conf',</div><div>           '-k', cmd]</div><div>    try:</div><div>        Popen(cmd, stdout=sys.stdout, stderr=sys.stderr)</div><div>    except CalledProcessError as err:</div><div>        print >> sys.stderr, 'Error executing %s: %s' % (cmd, err)</div><div>        sys.exit(1)</div><div><br></div><div>    sys.exit(0)</div><div><br></div><div>def start():</div><div>    httpd('start')</div><div><br></div><div>def stop():</div><div>    httpd('stop')</div><div><br></div><div>def restart():</div><div>    httpd('restart')</div></div><div><br></div><div>----</div><div><br></div><div><div>ServerRoot "/usr/apache2/2.4"</div><div><br></div><div>LoadModule authn_file_module libexec/mod_authn_file.so</div><div>LoadModule authn_core_module libexec/mod_authn_core.so</div><div>LoadModule authz_host_module libexec/mod_authz_host.so</div><div>LoadModule authz_groupfile_module libexec/mod_authz_groupfile.so</div><div>LoadModule authz_user_module libexec/mod_authz_user.so</div><div>LoadModule authz_core_module libexec/mod_authz_core.so</div><div>LoadModule access_compat_module libexec/mod_access_compat.so</div><div>LoadModule auth_basic_module libexec/mod_auth_basic.so</div><div>LoadModule reqtimeout_module libexec/mod_reqtimeout.so</div><div>LoadModule filter_module libexec/mod_filter.so</div><div>LoadModule log_config_module libexec/mod_log_config.so</div><div>LoadModule env_module libexec/mod_env.so</div><div>LoadModule headers_module libexec/mod_headers.so</div><div>LoadModule version_module libexec/mod_version.so</div><div>LoadModule slotmem_shm_module libexec/mod_slotmem_shm.so</div><div><IfDefine prefork></div><div>    LoadModule mpm_prefork_module libexec/mod_mpm_prefork.so</div><div></IfDefine></div><div><IfDefine worker></div><div>    LoadModule mpm_worker_module libexec/mod_mpm_worker.so</div><div></IfDefine></div><div><IfDefine !prefork></div><div>    <IfDefine !worker></div><div>        LoadModule mpm_event_module libexec/mod_mpm_event.so</div><div>    </IfDefine></div><div></IfDefine></div><div>LoadModule unixd_module libexec/mod_unixd.so</div><div>LoadModule status_module libexec/mod_status.so</div><div>LoadModule alias_module libexec/mod_alias.so</div><div>LoadModule wsgi_module libexec/<a href="http://mod_wsgi-2.7.so">mod_wsgi-2.7.so</a></div><div><br></div><div>LoadModule ssl_module libexec/mod_ssl.so</div><div><br></div><div><IfModule unixd_module></div><div>    User glance </div><div>    Group glance </div></div><div><div></IfModule></div><div><br></div><div>PidFile /var/lib/glance/glance-api.httpd.pid</div><div><br></div><div>ServerName XXX</div><div><br></div><div>Listen 9292</div><div><br></div><div>ErrorLogFormat "%{cu}t %M"</div><div>ErrorLog "/var/log/glance/glance-api_error.log"</div><div>LogLevel warn</div><div><br></div><div><IfModule log_config_module></div><div>    LogFormat "%h %u %t \"%r\" %p %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined</div><div></IfModule></div><div><br></div><div>CustomLog /var/log/glance/glance-api_access.log combined</div><div><br></div><div># Limit request up to 5GB</div><div><Directory /usr/lib/python2.7/vendor-packages/glance/common></div><div>    Options Indexes FollowSymLinks MultiViews</div><div>    AllowOverride None</div><div>    Require all granted</div><div>    LimitRequestBody 5368709122</div><div></Directory></div><div><br></div><div>WSGISocketPrefix /var/run/glance-api_wsgi_</div><div><br></div><div># Enable Chunks Requests Glance requires it</div><div><VirtualHost *:9292></div><div><br></div><div>    SSLEngine On</div><div><br></div><div>    # Disable the known insecure SSLv3 protocol</div><div>    SSLProtocol all -SSLv3</div><div><br></div><div>    SSLCertificateFile /etc/glance/ssl/public/server-cert-fchain.pem</div><div>    SSLCACertificateFile /etc/certs/ca-certificates.crt</div><div>    SSLCertificateKeyFile /etc/glance/ssl/private/server-key.pem</div><div><br></div><div>    WSGIChunkedRequest On</div><div>    WSGIDaemonProcess glance-api processes=2 threads=1 user=glance group=glance display-name=%{GROUP}</div><div>    WSGIProcessGroup glance-api</div></div><div><div>    WSGIScriptAlias / /usr/lib/glance/glance-api</div><div>    WSGIApplicationGroup %{GLOBAL}</div><div>    #WSGIPassAuthorization On</div><div>    <IfVersion >= 2.4></div><div>      ErrorLogFormat "%{cu}t %M"</div><div>    </IfVersion></div><div></VirtualHost></div></div></div><div class="gmail_extra"><br><div class="gmail_quote">On Thu, Aug 18, 2016 at 2:07 PM, Matthew Thode <span dir="ltr"><<a href="mailto:prometheanfire@gentoo.org" target="_blank">prometheanfire@gentoo.org</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><span class="">On 08/17/2016 03:52 PM, Nick Papadonis wrote:<br>
</span>> Comments<br>
<span class="">><br>
><br>
> Glance worked for me in Mitaka.  I had to specify 'chunked transfers'<br>
> and increase the size limit to 5GB.  I had to pull some of the WSGI<br>
> source from glance and alter it slightly to call from Apache.<br>
><br>
> I saw that Nova claims mod_wsgi is 'experimental'.  Interested in it's<br>
> really experimental or folks use it in production.<br>
><br>
> Nick<br>
<br>
</span>I haven't found any docs on getting mod_wsgi working for glance do you<br>
happen to have a link?<br>
<div class="HOEnZb"><div class="h5"><br>
--<br>
-- Matthew Thode (prometheanfire)<br>
<br>
</div></div><br>______________________________<wbr>______________________________<wbr>______________<br>
OpenStack Development Mailing List (not for usage questions)<br>
Unsubscribe: <a href="http://OpenStack-dev-request@lists.openstack.org?subject:unsubscribe" rel="noreferrer" target="_blank">OpenStack-dev-request@lists.<wbr>openstack.org?subject:<wbr>unsubscribe</a><br>
<a href="http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev" rel="noreferrer" target="_blank">http://lists.openstack.org/<wbr>cgi-bin/mailman/listinfo/<wbr>openstack-dev</a><br>
<br></blockquote></div><br></div>