2017-02-13 3 views
2

У меня есть два экземпляра сервера, на которых запущена NGINX.Постоянная ссылка Проблема - запуск Wordpress на NGINX за обратным прокси-сервером, который также является NGINX

  1. NGINX-A, это обратный прокси-сервер. Он перенаправляет трафик на другой внутренний сервер в зависимости от блока местоположения в его конфигурации.
  2. NGINX-B - это экземпляр сервера, в котором развернуты все наши веб-приложения PHP.
  3. Другие экземпляры сервера

Так NGINX-A, получает весь входящий трафик, перенаправляет его на соответствующий сервер. NGINX-B - это традиционный хостинг Wordpress, работающий на NGINX вместо Apache.


Я пытаюсь сделать postname пермалинки работы, но не смог сделать это.

Моя текущая структура каталогов:

/appl/wordpress/myblog == symbolic link ==> /usr/share/nginx/html/subdir/myblog 

Вот мой текущий конфиг на сервере NGINX-B, где установлен Wordpress.

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

Доступ его помощью http://NGINX_B-ip_address/subdir/myblog работ, как postname Permalinks и простые Permalinks. Мне пришлось обновить wp-config как таковой ниже.

define('WP_HOME', 'NGINX_B-ip_address') 
define('WP_SITEURL','NGINX_B-ip_address'); 

Теперь у меня есть еще один сервер Nginx, который действует в качестве обратного прокси-сервера, Nginx-A.

location /{ 
    proxy_pass http://NGINX_B-internal_ip_address; 
    proxy_http_version 1.1; 
    proxy_set_header Upgrade $http_upgrade; 
    proxy_set_header Connection 'upgrade'; 
    proxy_set_header Host $host; 
    proxy_cache_bypass $http_upgrade; 
    #for wordpress 
    proxy_set_header X-Forwarded-Proto $scheme; 
} 

Я также должен был обновить WP-config.php с новым именем хоста

define('WP_HOME', 'http://NGINX-A-hostname/myblog') 
define('WP_SITEURL','http://NGINX-A-hostname/myblog'); 

Он работает с использованием простые пермалинки и я могу получить доступ к WP-администратора без каких-либо проблем. Я также могу изменить стратегию постоянных ссылок.

Если я не использую простых постоянных ссылок, вся вещь ломается и продолжает получать ошибку 404.

  1. http://NGINX-A-hostname/myblog - работает
  2. http://NGINX-A-hostname/myblog/wp-admin - полностью работает
  3. http://NGINX-A-hostname/myblog/postname - терпит неудачу | 404
  4. http://NGINX-A-hostname/myblog/?p=postname - полностью работает

Это как если бы NGINX обратный прокси-сервер перенаправляет запрос в качестве каталога, а не параметром. Любое предложение? Благодаря!

+0

Могу ли я спросить, почему вы используете отдельный сервер nginx для обслуживания контента в качестве прокси-сервера с другого сервера/экземпляра nginx? Если это только для кеширования, вам лучше просто использовать кеш FastCGI от nginx, чтобы действовать как прокси-сервер с PHP-FPM, например, на том же сервере. Он более прочный и надежный. Если вы делаете это по другой причине, можете ли вы указать, какую стратегию постоянной ссылки вы пытаетесь использовать, которая не работает, и какой из них вы используете прямо сейчас, что работает? – ablopez

+0

Я не понимаю цели 'subdir' в вашем вопросе - или как URI' http: // hostname/myblog' находит свой путь к '/ subdir/myblog /'? –

+0

@ablopez Привет! Я уточнил вопрос, чтобы было ясно. Обычные постоянные ссылки работают как в ip-адресе, так и в настройке имени хоста. Постоянные постоянные ссылки работают только при непосредственном доступе через IP. –

ответ

0

Хорошо мне удалось решить мою проблему, применяя это к NGINX-B сервера

location /myblog { 
     root /usr/share/nginx/html/subdir; 
     try_files $uri $uri/ /myblog/index.php?$args; 
     location ~ \.php$ { 
       fastcgi_split_path_info ^(.+\.php)(/.+)$; 
       fastcgi_index index.php; 
       fastcgi_pass unix:/var/run/php5-fpm.sock; 
       include /etc/nginx/fastcgi_params; 
       fastcgi_param SCRIPT_FILENAME $request_filename; 
     } 
} 

Моя предыдущая конфигурация была это и не работал.

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

Это также не работает. Не принимайте корневую запись. Часть myblog не должна быть там, и myblog должен быть включен в try_files.

location /myblog { 
root /usr/share/nginx/html/subdir/myblog; 
    try_files $uri $uri/ /index.php?$args; 
    location ~ \.php$ { 
       fastcgi_split_path_info ^(.+\.php)(/.+)$; 
       fastcgi_index index.php; 
       fastcgi_pass unix:/var/run/php5-fpm.sock; 
       include /etc/nginx/fastcgi_params; 
       fastcgi_param SCRIPT_FILENAME $request_filename; 
     } 
} 
Смежные вопросы