Tengo dos problemas pero creo que están relacionados. Los subdirectorios como /wp-admin
, /blog
devuelven 404, en consecuencia, los enlaces permanentes no funcionan ya que siguen a /blog/category1/page.php
Mi configuración:
Tengo un servidor 192.168.1.4
ejecutando nginx. En otro servidor, 192.168.1.1
, tengo un servidor web apache que utiliza hosts virtuales que alojan mi sitio de wordpress. La configuración funciona bien sin nginx, pero cuando enciendo nginx tengo algunos problemas.
Nginx no funcionará con enlaces permanentes. He usado el valor predeterminado, por lo que ahora es como: http://www.mywebsite.co.uk/?page_id=90
, que funciona bien (siempre que no esté en un subdirectorio).
Todo en el subdirectorio (no en la raíz) se rompe. Incluidas las páginas de administración http://www.mywebsite.co.uk/wp-admin o (antes de desactivar los enlaces permanentes) http://www.mywebsite.co.uk/blog . Todos van a 404
, en concreto: 404 Not Found nginx/1.4.6 (Ubuntu)
Aquí está mi configuración:
server { server_name mywebsite.co.uk www.mywebsite.co.uk; location / { index index.php; proxy_pass http://192.168.1.1$request_uri; proxy_set_header Host $host; proxy_set_header X-Real-Ip $remote_addr; proxy_set_header X-Forwarded-For $remote_addr; try_files $uri $uri/ =404; #try_files $uri $uri/ /index.php?$args; #not working, error: rewrute or internal redirection cycle while interally redirecting to index.php } }
Como referencia, aquí están mis enlaces permanentes: /blog/%category%/%postname%/
Actualizar
Intenté agregar esto a mi configuración:
server { ... config above ... location /wp-admin/ { index index.php try_files $uri $uri/ /wp-admin/index.php?$args; proxy_pass http://192.168.1.1$request_uri; proxy_set_header Host $host; } }
esto devuelve un error en el registro:
rewrite or internal redirection cycle while internally redirecting to "/wp-admin/index.php", client: xxxxx, server: mydomain.co.uk`
Tienes bits de una configuración de trabajo. El propósito de nginx
en su configuración es revertir el proxy al servidor Apache. Los archivos index
y try_files
son inapropiados en este caso. Tratar:
server { server_name mywebsite.co.uk www.mywebsite.co.uk; location / { proxy_pass http://192.168.1.1; proxy_set_header Host $host; proxy_set_header X-Real-Ip $remote_addr; proxy_set_header X-Forwarded-For $remote_addr; } }
¿Por qué no quieres probar wordpress sin apache? la configuración de trabajo sería así:
server { listen 80; server_name site.com; root /home/www/site.com; access_log /var/log/nginx/log; error_log /var/log/nginx/error.log; index index.php; location / { try_files $uri $uri/ /index.php?q=$uri&$args; } # SECURITY : Deny all attempts to access PHP Files in the uploads directory location ~* /(?:uploads|files)/.*\.php$ { deny all; } location ~ \.php$ { try_files $uri =404; fastcgi_split_path_info ^(.+\.php)(/.+)$; fastcgi_pass unix:/var/run/php-fpm/php.sock; fastcgi_index index.php; include fastcgi_params; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; } location = /favicon.ico { log_not_found off; access_log off; } location = /robots.txt {allow all; log_not_found off; access_log off; } error_page 404 /404.html; location ~ /\. { deny all; } location ~* ^.+\.(js|css|swf|xml|txt|ogg|ogv|svg|svgz|eot|otf|woff|mp4|ttf|rss|atom|jpg|jpeg|gif|png|ico|zip|tgz|gz|rar|bz2|doc|xls|exe|ppt|tar|mid|midi|wav|bmp|rtf)$ { access_log off; log_not_found off; expires 30d; } }
Encontré en mi caso que el problema era que mod_rewrite no estaba habilitado. Tuve que ejecutar a2enmod rewrite en el servidor con apache