Estou mudando meu blog wordpress do Apache para o Nginx. Eu tentei vários tutoriais para fazer os permalinks funcionarem, mas nada está funcionando para mim. A estrutura do meu site é assim:
main site -> www.localhost.com
wordpress blog -> www.localhost.com/blog
O site /var/www/html
está instalado e o wordpress está instalado em/var/www/html/blog
Eu li vários artigos e assisti a vários vídeos, mas nada parece estar funcionando. Por favor, deixe-me saber onde estou errando.
Eu defini dois blocos de servidor em /etc/nginx/sites-available/default
um para o site principal e outro para o blog.
# Default server configuration
#
server {
listen 80 default_server;
listen [::]:80 default_server;
# SSL configuration
#
# listen 443 ssl default_server;
# listen [::]:443 ssl default_server;
#
# Note: You should disable gzip for SSL traffic.
# See: https://bugs.debian.org/773332
#
# Read up on ssl_ciphers to ensure a secure configuration.
# See: https://bugs.debian.org/765782
#
# Self signed certs generated by the ssl-cert package
# Don't use them in a production server!
#
# include snippets/snakeoil.conf;
root /var/www/html;
# Add index.php to the list if you are using PHP
index index.php index.html index.htm index.nginx-debian.html;
server_name _;
charset utf-8;
error_page 404 /404.php;
location /article {
rewrite ^/article.* / redirect;
}
#location / {
# try_files $uri $uri/ /loadpage.php?$args;
#}
location ~ \.html$ {
try_files $uri /courses/index.php?$args;
}
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
location ~ \.php$ {
include snippets/fastcgi-php.conf;
#
# # With php7.0-cgi alone:
# fastcgi_pass 127.0.0.1:9000;
# With php7.0-fpm:
fastcgi_pass unix:/var/run/php/php7.0-fpm.sock;
include fastcgi_params;
}
# deny access to .htaccess files, if Apache's document root
# concurs with nginx's one
#
location ~ /\.ht {
deny all;
}
}
server {
listen 80;
listen [::]:80;
root /var/www/html/blog;
index index.php index.html index.htm;
server_name example.com www.example.com;
location /blog/ {
try_files $uri $uri/ /blog/index.php?$args;
}
location ~ \.php$ {
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_index index.php;
# fastcgi_pass unix:/var/run/php/php7.1-fpm.sock; #Ubuntu 17.10
fastcgi_pass unix:/var/run/php/php7.0-fpm.sock; #Ubuntu 17.04
include fastcgi_params;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
}
Ao criar vários
server
blocos para o mesmo domínio, você está efetivamente criando uma colisão entre os servidores virtuais.server
Os blocos definem o que o Nginx irá ouvir. Se houver vários servidores virtuais para uma determinada porta, a solicitação será repassada para um servidor virtual com o arquivoserver_name
. Por ter vários servidores virtuais idênticos, o Nginx não terá como dizer para onde passá-lo.Seu site principal e o WordPress estão no mesmo domínio (e na mesma porta) e, portanto, devem estar em um único servidor virtual. Você os separa usando
location
blocos.Tome cuidado com o algoritmo de seleção de bloco Nginx , os blocos de expressão regular são sempre avaliados antes dos blocos normais. No seu exemplo, tudo que termina com
.html
é enviado para o seu site principal. Isso pode interferir no WordPress quando ele tenta usar a terminação do URI.html
também. Para evitar isso, você pode usar blocos de localização aninhados . Ao mover o bloco de localização da expressão regular para dentro/
, ele só será avaliado quando a localização pai corresponder. Quando chega uma solicitação para/blog
, o/blog
bloco de localização será o que melhor corresponder e, portanto, será selecionado sobre/
aquele. Como o bloco de expressão regular agora está aninhado lá, ele não será avaliado para solicitações ao WordPress.