I generally use Nginx to serve static content on my server, with Apache handling PHP content using PHP-FPM. However, I’m not able to get a WordPress blog homepage to display and I’ve tried all the configuration examples I can find on the web without much luck.
Here is my Nginx config:
server {
listen XXX.XXX.XXX.XXX:80;
server_name wptest.mydomain.com;
access_log /var/log/nginx/testblog_access.log combined;
error_log /var/log/nginx/testblog-error.log;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
location / {
proxy_pass http://127.0.0.1:80;
}
location = /50x.html {
root /var/www/nginx-default;
}
# No access to .htaccess files.
location ~ /.ht {
deny all;
}
}
My Apache config is as follows:
<VirtualHost 127.0.0.1>
ServerName wptest.mydomain.com
ServerAdmin webmaster@mydomain.com
LogLevel warn
ErrorLog /var/log/apache2/testblog-error.log
CustomLog /var/log/apache2/testblog-access.log combined
Options +FollowSymLinks +ExecCGI -Indexes -MultiViews
AddHandler php-fastcgi .php
Action php-fastcgi /wordpress
Alias /wordpress /var/www/wordpress
FastCgiExternalServer /var/www/wordpress -host 127.0.0.1:9000
RewriteEngine on
DocumentRoot /var/www/wordpress
DirectoryIndex index.php
<Directory />
DirectoryIndex index.php
AllowOverride All
Options +FollowSymLinks +ExecCGI +SymLinksIfOwnerMatch
</Directory>
<Directory /var/www/wordpress>
AllowOverride All
Options +FollowSymLinks +ExecCGI +SymLinksIfOwnerMatch
</Directory>
</VirtualHost>
I am not able to view “http://wptest.mydomain.com/” or “http://wptest.mydomain.com/wp-admin” but “http://wptest.mydomain.com/wp-login.php” does work. What am I doing wrong?
Version information:
+ OS: Debian 5/Lenny
+ Apache: 2.2.9
+ Nginx: 0.7.65
+ WordPress: 3.1.2
Both servers are listening to the same port. You have Nginx set to listen to 80 and nothing is set for Apache unless it’s in your ports.conf.
Your also proxy passing to Apache port 80 in your Nginx conf.
In the Nginx conf change
proxy_pass http://127.0.0.1:80;
to
proxy_pass http://127.0.0.1:9000;
change
listen XXX.XXX.XXX.XXX:80;
tolisten 80;
In your Vhosts
add
Above the
<VirtualHost>
tag or in the ports.conf file (If you have other vhost that don’t use Nginx add it to the top of your vhost. Change virtual host to look like this:<VirtualHost *9000>
I copied your config and I got those 404s. It seems like you have mixed up fastcgi and Apache is confused where to find fastcgi and WordPress. As soon as I separated the fastcgi binary from WordPress I was able to make it work. In my setup I had WordPress was installed in /var/www/wordpress which is out of document root, my document root was something out of /var. But I could access WordPress as http://domain.com/wordpress/ because of following Alias.
Then I created a fastcgi directory outside of WordPress in /var/www so it will be
Then I linked the php5-cgi binary to this directory:
I separated the php5-cgi because I don’t like the idea of having a binary file under the directory accessible via web server.
Then I config my Apache as follows:
And it started working. Hope this will help you fix your Apache config, let me know if there is anything wrong.
I don’t know whether I should be proud or embarrassed that I’m coming back to answer my own question more than a year later. So, I finally found some time to work on this issue today and managed to get this configuration working. Turns out there were a few missing statements in my original configuration, but the critical change was in wp-config.php. To pull everything together, starting off with my nginx config (which is almost entirely lifted from the nginx wiki):
Next up, my Apache config:
Finally, the one extra line in the wp-config.php file that makes it all work (Taken from the Codex)
With this configuration, I have tested that pretty permalinks via .htaccess works correctly.