Nginx Problema do HHVM Wordpress com a execução do PHP em um subdiretório intermediário

3

Eu tenho uma situação estranha com um dos meus sites, ainda em desenvolvimento na AWS. Eu tenho o nginx 1.9.9 com o HHVM 3.6.6-1.amzn1.x86_64 em um t2.micro. Não é publicamente acessível.

Eu tenho um site personalizado escrito na raiz do domínio, tenho o Wordpress no diretório / blog e o wordpress admin está em / blog / wp-admin. O site personalizado tem vários arquivos, incluindo index.php. Wordpress tem index.php e todos os tipos de outras coisas no diretório do blog, o wp-admin também usa index.php.

Eu posso carregar o site personalizado, ele funciona totalmente. Wordpresss admin funciona totalmente. A tela inicial / lista de histórias do blog Wordpress funciona totalmente. O problema é quando clico em qualquer um dos links do artigo do blog para visualizá-lo na íntegra e mostra o índice da página inicial do site personalizado. Então, para dizer de outra maneira

http://www.example.com/index.php  - custom website works
http://www.example.com/blog/index.php  - blog index works
http://www.example.com/blog/2015/storyname - story load doesn't work with permalink %postname% regardless of text in post name - http://www.example.com/index.php loads
http://www.example.com/blog/2015/?p=96 - story load works
http://www.example.com/blog/wp-admin/ - admin works

Quando clico no link da história, recebo o mesmo conteúdo de página, como se tivesse clicado no link , exceto nas imagens don carregue como eles são feitos com URLs relativos

http://www.example.com/blog/2015/storyname

Quando eu carrego a raiz do site /index.php eu recebo os seguintes cabeçalhos de depuração (veja minha configuração abaixo para saber como eles são gerados)

Z_LOCATION: PHP MAIN
URI: /index.php
Z_DOCUMENT_ROOT: /var/www/hr
Z_FASTCGI_SCRIPT_NAME: /index.php
Z_REQUEST_FILENAME: /var/www/hr/index.php

Quando eu carrego / wp-admin / eu recebo esses cabeçalhos

Z_LOCATION: PHP MAIN
URI: /blog/wp-admin/index.php
Z_DOCUMENT_ROOT: /var/www/hr
Z_FASTCGI_SCRIPT_NAME: /blog/wp-admin/index.php
Z_REQUEST_FILENAME: /var/www/hr/blog/wp-admin/index.php

Quando carrego o blog home /blog/index.php, recebo esses cabeçalhos

Z_LOCATION: PHP MAIN
URI: /blog/index.php
Z_DOCUMENT_ROOT: /var/www/hr
Z_FASTCGI_SCRIPT_NAME: /blog/index.php
Z_REQUEST_FILENAME: /var/www/hr/blog/index.php

Quando tento carregar este URL link , recebo os seguintes cabeçalhos. Z_REQUEST_FILENAME (acima) mostra o URL incorreto sendo carregado.

Z_LOCATION: PHP MAIN
URI: /index.php
Z_DOCUMENT_ROOT: /var/www/hr
Z_FASTCGI_SCRIPT_NAME: /index.php
Z_REQUEST_FILENAME: /var/www/hr/index.php

Não tenho ideia do motivo pelo qual ele tenta carregar o index.php da raiz do site quando clico nessa URL. Dicas:

  • Alterando a estrutura de permalink do Wordpress de% postname% para? p = 123 corrige o problema
  • Nenhuma das outras estruturas permalink ajuda em tudo

Por que isso seria um problema apenas para visualizar artigos em blogs? Gostaria de saber se é algo a ver com os try_files?

Não há nada no log de erros do hhvm, não há nada no log de erros do nginx. O log de acesso mostra o seguinte quando eu solicito esse último URL

(IP removed) - - [10/Jan/2016:08:22:19 +0000] "GET /blog/2015/storyname HTTP/1.1" 200 4424 "http://www.example.com/blog/" "Mozilla/5.0 (Windows NT 10.0; WOW64; rv:43.0) Gecko/20100101 Firefox/43.0" "-" "0.050"

Aqui está minha configuração do site nginx. Eu não incluí o nginx.conf principal, pois não acho relevante. NB atualizei este trabalho com o código de trabalho.

server {
  server_name www.example.com;
  root /var/www/hr;
  access_log      /var/log/nginx/hr.access.log main;

  # Default location to serve
  location / {
    try_files $uri $uri/ /blog/index.php?$args;
    add_header Z_LOCATION "hr_root"; add_header URI $uri; # DEBUG
  }

  location ~*      \.(jpg|jpeg|png|gif|css|js)$ {
    log_not_found off; access_log off;
    add_header Z_LOCATION "STATIC RESOURCES REGEX"; add_header URI $uri;      # DEBUG
  }

  # Send HipHop and PHP requests to HHVM
  location ~ \.(hh|php)$ {
    fastcgi_keep_conn on;
    fastcgi_intercept_errors on;
    fastcgi_pass       php;
    include                        fastcgi_params;
    fastcgi_param      SCRIPT_FILENAME $document_root$fastcgi_script_name;

    # DEBUGGING
    add_header Z_LOCATION "PHP MAIN"; add_header URI $uri;
    add_header Z_DOCUMENT_ROOT "$document_root"; add_header Z_FASTCGI_SCRIPT_NAME "$fastcgi_script_name";
    add_header Z_REQUEST_FILENAME "$request_filename";
  }
}

# Forward non-www requests to www
server {
  listen 0;
  server_name example.com;
  return 302 http://www.example.com$request_uri;
}

Quaisquer pensamentos, ideias ou ajuda apreciada. Este é um bastante encaracolado, para mim, mas eu suspeito que será uma simples mudança para consertá-lo.

    
por Tim 10.01.2016 / 09:44

1 resposta

4

A entrega de conteúdo do WordPress é executada pelo script /blog/index.php . Presumivelmente, isso é invocado quando você envia o URI /blog/ devido à cláusula $uri/ em try_files . Mas você não tem regras para invocar /blog/index.php para qualquer outro URI começando com /blog/... .

Uma opção é tornar o WorkPress o padrão:

location / {
    try_files $uri $uri/ /blog/index.php?$args;
    ...
}

Como alternativa, adicione outro bloco de localização para lidar apenas com os URIs que começam com /blog/... :

location /blog {
    try_files $uri $uri/ /blog/index.php?$args;
    ...
}
    
por 10.01.2016 / 11:17