[Moin-user] Configuring URL prefix for Moin served via Nginx + Gunicorn

Paul Boddie paul at boddie.org.uk
Tue May 27 14:17:12 EDT 2014


On Tuesday 27. May 2014 09.27.29 Darren Spruell wrote:
> Greetings,
> 
> MoinMoin 1.9.7
> Gunicorn 18.0
> Nginx 1.4.1
> 
> I have a single wiki instance that works correctly when served from
> the root of my site (/). I want to migrate it on the site now to be
> served from /wiki/home/ (e.g.
> http://www.example.org/wiki/home/HelpContents). When I configure this
> on Nginx and then set 'url_prefix_static' in the MoinMoin config, wiki
> pages are not served correctly. i.e. attempting to access
> http://www.example.org/wiki/home/ attempts to load a page named
> 'wiki/home' and MoinMoin returns 404 with "This page does not exist
> yet. You can create a new empty page, or use one of the page
> templates."

So you first need to make sure that Moin is served for that resource and not 
the root resource, and you then need to let Moin know that it is rooted at 
this new resource itself.

> I cannot find a config option to instruct MoinMoin that it is being
> served from a subdirectory of the site and to therefore operate under
> a URL prefix. I understand that 'url_prefix_static' is only for static
> media. I notice that
> http://moinmo.in/HelpOnConfiguration#Configuration_of_multiple_wikis
> documents a config option 'url_prefix' however various references make
> it look as if that setting is no longer used/suggested.

Yes, there's a mention of it in wikiconfig.py files that I've seen, but it 
appears to be obsolete.

> Gunicorn is a WSGI server but as opposed to uwsgi it uses standard
> HTTP as a service protocol; I think this prevents one from passing
> environment settings (such as SCRIPT_NAME) as one would for e.g. FCGI
> or UWSGI, etc. However I notice that placing the following in my
> moin.wsgi seems to fix he path finding:
> 
> os.environ['SCRIPT_NAME'] = '/wiki/home'

Well, this should be presented to Moin by the Web server: that's what it is 
for! However, in moin.wsgi, you might be able to set the fix_script_name 
setting instead.

> To me, this seems like more of a hack than a solution.
> 
> Current config details:
> 
> # Nginx config section
> location /wiki/home {
>     try_files           $uri @wiki_home_rewrite;
> }
> location @wiki_home_rewrite {
>     proxy_set_header    X-Forwarded-For $proxy_add_x_forwarded_for;
>     proxy_set_header    Host $http_host;
>     proxy_redirect      off;
>     proxy_pass          http://127.0.0.1:8001;
> }
> 
> # wikiconfig.py
> class Config(multiconfig.DefaultConfig):
>     ...
>     url_prefix_static = '/wiki/home' + url_prefix_static
>     ...
> 
> Is there a way to configure MoinMoin to understand that it is being
> served from a URL with a prefix path and operate as desired without
> modifying the environment in the WSGI driver script?

If you can get away with fix_script_name, then yes. Otherwise, perhaps not. 
Again, without things like SCRIPT_NAME, scripts know nothing about their 
environment or the way they are deployed.

Paul




More information about the Moin-user mailing list