Unix — Setup WordPress on Apache PHP5 through Nginx Reverse Proxy

Set up WordPress running on Apache through an Nginx reverse proxy.

Assuming you have apache2 installed, grab the relevant PHP5 libraries:
apt-get install libapache2-mod-php5, php5

Set up Apache

Set up an apache VirtualHost that listens on some port, say 8080.


Listen 8088

ServerName Blah
DocumentRoot /path/to/wordpress

Options FollowSymLinks
AllowOverride All

Set AllowOverride to allow wordpress to use .htaccess.

mod rewrite

You may need to install the apache rewrite module.
locate mod_rewrite.so revealed I have mod_rewrite in /usr/lib/apache2/mod_rewrite.so, so I added a file in /etc/apache2/mods-enabledthat contained:

LoadModule rewrite_module /usr/lib/apache2/modules/mod_rewrite.so

Set up Nginx

Next up is to proxy some address to the apache server listening on 8080.

Set up a location in your nginx server configuration files to point proxy_pass the traffic to your apache server.
Inside your server directive, you’d have something like:
location /my-blog/ {
proxy_pass http://127.0.0.1:8080;
proxy_redirect off;
# more settings...
}

and bam!

visit /my-blog/ and your wordpress should start.

Modify wordpress to use new addresses

WordPress doesn’t know it’s living in a subdirectory because the request is proxied from Nginx.

You can fix the links from pointing at the root domain by modifying the home and home_url settings in the wp_options table to include yourdomain.com/my-blog

(also found in the general settings tab of WP admin)

Finally, one last fix with nginx for wp-admin bugginess

It seems the admin isn’t 100% good at dealing with WP living in a subdirectory. It tends to send me off to the root domain for searches and various other misc links.

I fixed this by making a rewrite rule in nginx that directs all traffic from /wp-admin to /my-blog/wp-admin/.

location /wp-admin/ {
rewrite ^/(.*)$ http://yourdomain.com/my-blog/$1 permanent;
}

Finally, we have our blog..

Internet Explorer — Fancybox Issues (1.3.x)

I was wondering what was causing my Fancybox to display incorrectly in IE, because i kinda assumed a release would be stable across modern browsers.

The problem is just that fancybox 1.3.x has been released w/o working for IE8.

Switch back to 1.2.6 and we’re good to go.

Django — ModelAdmin object has no attribute ‘__name__’

Got this delicious error today.

AttributeError: ‘ReturnAdmin’ object has no attribute ‘__name__’

Turns out that you can’t use the ForeignKey traversing syntax used everywhere in Django for ModelAdmin list_display

list_display = ('my_fk__blah',)

Will throw this mysterious error.

Django — How to filter models by a field on the model

I had read this functionality in the docs, but couldn’t find it with my googlefu.

Update: I couldn’t find my own post via my googlefu when I needed it again so I will insert some useful keywords here: Django Self Reference Field

For future reference, it’s the F object from django.db.models

Syntax:

Model.objects.filter(some_field=F('other_field'))

This would filter for models where some_field is equal to other_field in the same instance.