2015-01-22 22:05:35 +00:00
<!DOCTYPE html>
< html >
< head >
< meta charset = "utf-8" >
< meta http-equiv = "X-UA-Compatible" content = "IE=edge,chrome=1" >
< title > < / title >
< meta name = "viewport" content = "width=device-width" >
<!-- syntax highlighting CSS -->
2015-01-22 23:22:30 +00:00
< link rel = "stylesheet" href = "/theme/css/solarized.css" >
2015-01-22 22:05:35 +00:00
<!-- <link href="/css/bootstrap.css" rel="stylesheet"> -->
< link rel = "stylesheet" href = "/theme/font-awesome/css/font-awesome.min.css" >
<!-- <link rel="stylesheet" href="/css/bootstrap - responsive.min.css"> -->
<!-- Custom CSS -->
< link rel = "stylesheet" media = "only screen" href = "/theme/css/main.css" >
< link rel = "stylesheet" media = "only screen and (min-width: 0px) and (max-width: 599px)" href = "/theme/css/main-xs.css" >
< link rel = "stylesheet" media = "only screen and (min-width: 600px) and (max-width: 1199px)" href = "/theme/css/main-medium.css" >
< link rel = "stylesheet" media = "only screen and (min-width: 1200px)" href = "/theme/css/main-desktop.css" >
< link href = 'http://fonts.googleapis.com/css?family=Open+Sans:300|Comfortaa' rel = 'stylesheet' type = 'text/css' >
2015-12-08 03:37:10 +00:00
<!-- Piwik -->
< script type = "text/javascript" >
var _paq = _paq || [];
_paq.push(['trackPageView']);
_paq.push(['enableLinkTracking']);
(function() {
var u="//piwik.sinpapel.es/";
_paq.push(['setTrackerUrl', u+'piwik.php']);
_paq.push(['setSiteId', 2]);
var d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0];
g.type='text/javascript'; g.async=true; g.defer=true; g.src=u+'piwik.js'; s.parentNode.insertBefore(g,s);
})();
< / script >
< noscript > < p > < img src = "//piwik.sinpapel.es/piwik.php?idsite=2" style = "border:0;" alt = "" / > < / p > < / noscript >
<!-- End Piwik Code -->
2015-01-22 22:05:35 +00:00
< / head >
< body >
< div id = "container" class = "container" >
< header id = "header" >
< div id = "navbar" class = "navbar navbar-inverse navbar-static-bottom" >
< div class = "container" >
< div class = "navbar-header" >
< ul class = "nav navbar-nav" >
< li class = "active" >
2015-12-07 20:57:42 +00:00
< a href = "/" > < i class = "icon-home icon-large" > < / i > < / a >
2015-12-07 22:12:27 +00:00
< / li >
< li >
< a href = "/pages/projects.html" > Projects< / a >
< / li >
< li >
< a href = "/pages/to-do.html" > To-Do< / a >
< / li >
2015-12-07 20:57:42 +00:00
< li >
2015-12-08 00:06:02 +00:00
< a href = "//jfernando.es" target = "_blank" > CV< / a >
2015-12-07 20:57:42 +00:00
< / li >
2015-01-22 22:05:35 +00:00
< / ul >
2015-12-07 22:12:27 +00:00
< / div >
2015-01-22 22:05:35 +00:00
< / div >
< / div >
< / header >
< div id = "contentwrapper" >
< div id = "sidebar" >
< div id = "badge" class = "flip-container" ontouchstart = "this.classList.toggle('hover');" >
< div class = "flipper sticky" >
< div class = "front" >
<!-- front content -->
< img id = "avatar" width = 100% src = "/theme/img/me.png" >
< / div >
< div class = "back" >
<!-- back content -->
2015-12-07 20:57:42 +00:00
< img id = "picture" width = 100% src = "/theme/img/me-bat.png" >
2015-01-22 22:05:35 +00:00
< / div >
< / div >
< / div >
2015-12-08 12:42:59 +00:00
< div id = "about" style = "clear:both;" >
<!-- <h1 class="title">Interests</h1> -->
< div class = "icons" >
< span class = "coolicon" > < span class = "icon-stack" > < i class = "icon-check-empty icon-stack-base" > < / i > < i class = "icon-linux" > < / i > < / span > < span class = "explanation" > Linux lover< / span > < / span >
< span class = "coolicon" > < span class = "icon-stack" > < i class = "icon-check-empty icon-stack-base" > < / i > < i class = "icon-android" > < / i > < / span > < span class = "explanation" > Android dev< / span > < / span >
< span class = "coolicon" > < span class = "icon-stack" > < i class = "icon-check-empty icon-stack-base" > < / i > < i class = "icon-github" > < / i > < / span > < span class = "explanation" > GitHub user< / span > < / span >
< span class = "coolicon" > < span class = "icon-stack" > < i class = "icon-check-empty icon-stack-base" > < / i > < i class = "icon-stackexchange" > < / i > < / span > < span class = "explanation" > StackExchange fan< / span > < / span >
< span class = "coolicon" > < span class = "icon-stack" > < i class = "icon-check-empty icon-stack-base" > < / i > < i class = "icon-music" > < / i > < / span > < span class = "explanation" > Music lover< / span > < / span >
< span class = "coolicon" > < span class = "icon-stack" > < i class = "icon-check-empty icon-stack-base" > < / i > < i class = "icon-film" > < / i > < / span > < span class = "explanation" > Movie fan< / span > < / span >
< span class = "coolicon" > < span class = "icon-stack" > < i class = "icon-check-empty icon-stack-base" > < / i > < i class = "icon-comments" > < / i > < / span > < span class = "explanation" > Always on IM< / span > < / span >
< span class = "coolicon" > < span class = "icon-stack" > < i class = "icon-check-empty icon-stack-base" > < / i > < i class = "icon-laptop" > < / i > < / span > < span class = "explanation" > Always on a PC< / span > < / span >
< span class = "coolicon" > < span class = "icon-stack" > < i class = "icon-check-empty icon-stack-base" > < / i > < i class = "icon-pencil" > < / i > < / span > < span class = "explanation" > Occassional writter< / span > < / span >
< span class = "coolicon" > < span class = "icon-stack" > < i class = "icon-check-empty icon-stack-base" > < / i > < i class = "icon-moon" > < / i > < / span > < span class = "explanation" > Night owl< / span > < / span >
< span class = "coolicon" > < span class = "icon-stack" > < i class = "icon-check-empty icon-stack-base" > < / i > < i class = "icon-terminal" > < / i > < / span > < span class = "explanation" > CLI user< / span > < / span >
< span class = "coolicon" > < span class = "icon-stack" > < i class = "icon-check-empty icon-stack-base" > < / i > < i class = "icon-flag" > < / i > < / span > < span class = "explanation" > Linguist wannabe< / span > < / span >
< span class = "coolicon" > < span class = "icon-stack" > < i class = "icon-check-empty icon-stack-base" > < / i > < i class = "icon-code" > < / i > < / span > < span class = "explanation" > Love to code< / span > < / span >
< span class = "coolicon" > < span class = "icon-stack" > < i class = "icon-check-empty icon-stack-base" > < / i > < i class = "icon-book" > < / i > < / span > < span class = "explanation" > Keen reader< / span > < / span >
< span class = "coolicon" > < span class = "icon-stack" > < i class = "icon-check-empty icon-stack-base" > < / i > < i class = "icon-quote-right" > < / i > < / span > < span class = "explanation" > Quotes on demand< / span > < / span >
< / div >
< / div >
2015-01-22 22:05:35 +00:00
< div class = "entries" >
2015-12-08 12:42:59 +00:00
< h2 class = "title" > Latest entries< / h2 >
2015-01-22 22:05:35 +00:00
< dl >
2015-03-11 01:55:29 +00:00
< dt > < a href = "/sharing-dotfiles.html" > Sharing dotfiles< / a > < / dt >
< a class = "tag" href = "/tag/github.html" > < dd class = "label label-default" > github< / dd > < / a >
< a class = "tag" href = "/tag/git.html" > < dd class = "label label-default" > git< / dd > < / a >
< a class = "tag" href = "/tag/dotfiles.html" > < dd class = "label label-default" > dotfiles< / dd > < / a >
2015-01-22 22:28:51 +00:00
< dt > < a href = "/zotero.html" > Zotero< / a > < / dt >
2015-01-22 22:05:35 +00:00
< a class = "tag" href = "/tag/zotero.html" > < dd class = "label label-default" > zotero< / dd > < / a >
< a class = "tag" href = "/tag/webdav.html" > < dd class = "label label-default" > webdav< / dd > < / a >
< a class = "tag" href = "/tag/nginx.html" > < dd class = "label label-default" > nginx< / dd > < / a >
< a class = "tag" href = "/tag/apache.html" > < dd class = "label label-default" > apache< / dd > < / a >
2015-01-22 22:28:51 +00:00
< dt > < a href = "/proxies-with-apache-and-python.html" > Proxies with Apache and python< / a > < / dt >
2015-01-22 22:05:35 +00:00
< a class = "tag" href = "/tag/python.html" > < dd class = "label label-default" > python< / dd > < / a >
< a class = "tag" href = "/tag/apache.html" > < dd class = "label label-default" > apache< / dd > < / a >
< a class = "tag" href = "/tag/proxy.html" > < dd class = "label label-default" > proxy< / dd > < / a >
< a class = "tag" href = "/tag/gunicorn.html" > < dd class = "label label-default" > gunicorn< / dd > < / a >
< a class = "tag" href = "/tag/uwsgi.html" > < dd class = "label label-default" > uwsgi< / dd > < / a >
2015-01-22 22:51:14 +00:00
< dt > < a href = "/publishing-in-pypi.html" > Publishing in PyPi< / a > < / dt >
< a class = "tag" href = "/tag/github.html" > < dd class = "label label-default" > github< / dd > < / a >
< a class = "tag" href = "/tag/python.html" > < dd class = "label label-default" > python< / dd > < / a >
< a class = "tag" href = "/tag/pypi.html" > < dd class = "label label-default" > pypi< / dd > < / a >
< dt > < a href = "/updating-eurolovemap.html" > Updating EuroLoveMap< / a > < / dt >
< a class = "tag" href = "/tag/javascript.html" > < dd class = "label label-default" > javascript< / dd > < / a >
< a class = "tag" href = "/tag/python.html" > < dd class = "label label-default" > python< / dd > < / a >
< a class = "tag" href = "/tag/heroku.html" > < dd class = "label label-default" > heroku< / dd > < / a >
2015-01-22 22:05:35 +00:00
< / dl >
< / div >
2015-12-08 12:42:59 +00:00
<!-- Sidebar content -->
2015-01-22 22:05:35 +00:00
< / div >
< div id = "content" >
<!-- Body content -->
< div class = "postnav" >
< a href = "publishing-in-pypi.html" > < span class = "previouspost" > < i class = "icon-chevron-sign-left" > < / i > Publishing in PyPi< / a > < / span >
< span class = 'nextpost' > < a href = "/zotero.html" > Zotero < i class = "icon-chevron-sign-right" > < / i > < / span > < / a >
< / div >
< div class = "posthead" >
< h2 class = "title" > Proxies with Apache and python< / h2 >
< span class = "meta date" > 2014-10-09< / span >
< a class = "tag" href = "/tag/python.html" > < span class = "label label-default" > python< / span > < / a >
< a class = "tag" href = "/tag/apache.html" > < span class = "label label-default" > apache< / span > < / a >
< a class = "tag" href = "/tag/proxy.html" > < span class = "label label-default" > proxy< / span > < / a >
< a class = "tag" href = "/tag/gunicorn.html" > < span class = "label label-default" > gunicorn< / span > < / a >
< a class = "tag" href = "/tag/uwsgi.html" > < span class = "label label-default" > uwsgi< / span > < / a >
< / div >
< div class = "post" >
< p > This is a quick note on proxying a local python application (e.g. flask)
to a subdirectory in Apache. This assumes that the file wsgi.py contains
a WSGI application with the name < em > application< / em > . Hence, wsgi:application.< / p >
< div class = "section" id = "gunicorn" >
< h2 > Gunicorn< / h2 >
< table class = "highlighttable" > < tr > < td class = "linenos" > < div class = "linenodiv" > < pre > 1
2
3
4
5< / pre > < / div > < / td > < td class = "code" > < div class = "highlight" > < pre > < span class = "nt" > < Location< / span > < span class = "s" > /myapp/< / span > < span class = "nt" > > < / span >
< span class = "nb" > ProxyPass< / span > http://127.0.0.1:8888/myapp/
< span class = "nb" > ProxyPassReverse< / span > http://127.0.0.1:8888/myapp/
< span class = "nb" > RequestHeader< / span > set SCRIPT_NAME < span class = "s2" > " /myapp/" < / span >
< span class = "nt" > < /Location> < / span >
< / pre > < / div >
< / td > < / tr > < / table > < p > < strong > Important< / strong > : < em > SCRIPT_NAME< / em > and the end of < em > ProxyPass< / em > URL < strong > MUST BE
THE SAME< / strong > . Otherwise, Gunicorn will fail miserably.< / p >
2015-01-22 22:43:28 +00:00
< p > Try it with:< / p >
2015-01-22 22:48:45 +00:00
< table class = "highlighttable" > < tr > < td class = "linenos" > < div class = "linenodiv" > < pre > 1< / pre > < / div > < / td > < td class = "code" > < div class = "highlight" > < pre > venv/bin/gunicorn -w < span class = "m" > 4< / span > -b 127.0.0.1:8888 --log-file - --access-logfile - wsgi:application
2015-01-22 22:43:28 +00:00
< / pre > < / div >
2015-01-22 22:48:45 +00:00
< / td > < / tr > < / table > < / div >
2015-01-22 22:05:35 +00:00
< div class = "section" id = "uwsgi" >
< h2 > UWSGI< / h2 >
< p > This is a very simple configuration. I will try to upload one with more
options for uwsgi (in a .ini file).< / p >
< table class = "highlighttable" > < tr > < td class = "linenos" > < div class = "linenodiv" > < pre > 1
2
3
4< / pre > < / div > < / td > < td class = "code" > < div class = "highlight" > < pre > < span class = "nt" > < Location< / span > < span class = "s" > /myapp/< / span > < span class = "nt" > > < / span >
< span class = "nb" > SetHandler< / span > uwsgi_handler
< span class = "nb" > uWSGISocker< / span > < span class = "m" > 127.0.0.1< / span > :8888
< span class = "nt" > < /Location> < / span >
< / pre > < / div >
< / td > < / tr > < / table > < p > Try it with:< / p >
< table class = "highlighttable" > < tr > < td class = "linenos" > < div class = "linenodiv" > < pre > 1< / pre > < / div > < / td > < td class = "code" > < div class = "highlight" > < pre > uwsgi --socket 127.0.0.1:8888 -w wsgi:application
< / pre > < / div >
< / td > < / tr > < / table > < div class = "section" id = "extra-supervisor" >
< h3 > Extra: Supervisor< / h3 >
< p > If everything went as expected, you can wrap your command in a
supervisor config file and let it handle the server for you.< / p >
< table class = "highlighttable" > < tr > < td class = "linenos" > < div class = "linenodiv" > < pre > 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19< / pre > < / div > < / td > < td class = "code" > < div class = "highlight" > < pre > < span class = "k" > [unix_http_server]< / span >
< span class = "na" > file< / span > < span class = "o" > =< / span > < span class = "s" > /tmp/myapp.sock ; path to your socket file< / span >
< span class = "k" > [supervisord]< / span >
< span class = "na" > logfile< / span > < span class = "o" > =< / span > < span class = "s" > %(here)s/logs/supervisor.log< / span >
< span class = "na" > childlogdir< / span > < span class = "o" > =< / span > < span class = "s" > %(here)s/logs/< / span >
< span class = "k" > [rpcinterface:supervisor]< / span >
< span class = "na" > supervisor.rpcinterface_factory< / span > < span class = "o" > =< / span > < span class = "s" > supervisor.rpcinterface:make_main_rpcinterface< / span >
< span class = "k" > [supervisorctl]< / span >
< span class = "na" > logfile< / span > < span class = "o" > =< / span > < span class = "s" > %(here)s/logs/supervisorctl.log< / span >
< span class = "na" > serverurl< / span > < span class = "o" > =< / span > < span class = "s" > unix:///tmp/supervisor.sock ; use a unix:// URL for a unix socket< / span >
< span class = "k" > [program:myapp]< / span >
< span class = "na" > command< / span > < span class = "o" > =< / span > < span class = "s" > venv/bin/gunicorn -w 4 -b 0.0.0.0:5000 --log-file %(here)s/logs/gunicorn.log --access-logfile - wsgi:application< / span >
< span class = "na" > directory< / span > < span class = "o" > =< / span > < span class = "s" > %(here)s< / span >
< span class = "na" > environment< / span > < span class = "o" > =< / span > < span class = "s" > PATH=%(here)s/venv/bin/< / span >
< span class = "na" > logfile< / span > < span class = "o" > =< / span > < span class = "s" > %(here)s/logs/myapp.log< / span >
< / pre > < / div >
< / td > < / tr > < / table > < / div >
< / div >
< / div >
< / div >
< div class = "clear" > < / div >
< / div >
< footer role = "contentinfo" >
< div class = "contact" >
< p >
J. Fernando Sánchez Rada | balkian
< / p >
< / div >
< ul id = "social" >
< li > < a href = "http://github.com/balkian" > < i class = "icon-github" > < / i > < / a > < / li >
< li > < a href = "http://bitbucket.com/balkian" > < i class = "icon-bitbucket" > < / i > < / a > < / li >
< li > < a href = "http://twitter.com/balkian" > < i class = "icon-twitter" > < / i > < / a > < / li >
< li > < a href = "https://plus.google.com/u/0/111897020957944410316" > < i class = "icon-google-plus" > < / i > < / a > < / li >
< li > < a href = "http://linkedin.com/in/jfsanchezrada" > < i class = "icon-linkedin" > < / i > < / a > < / li >
< li > < a href = "http://facebook.com/balkian" > < i class = "icon-facebook-sign" > < / i > < / a > < / li >
< / ul >
< p >
Creative Commons A-SA-NC
< / p >
< / footer >
< / div >
< script src = "/theme/js/jquery-2.0.2.min.js" > < / script >
<!-- <script src="/js/bootstrap.min.js"></script> -->
< / body >
< / html >