2016-02-21 3 views
1

У меня есть Nginx дом в /опт/Nginx, внутри есть site1 и почты папки, site1 имеет HTML папку, которая является WordPress установка и почта является сайтом электронной почты, оба из них должны быть проксимированы до php-fpm, site1/html работает как шарм без проблем.Nginx Перенаправление к родственным папку и служить PHP не работает

У меня есть domain1.com и мой сервер обеспечивает site1/html содержимого при domain1.com запрашивается.

То, что я хочу сделать, это, когда domain1.com/mail испрашивается, служить содержание почты папки (родственный ) Сайта 1. Если бы я оставил index.html файла внутри почты, когда domail1.com/mail запрашивается, index.html подается клиент без проблем, но если я пытаюсь поставить почты/index.php, 404 ошибка роста вместо, что я делаю неправильно? ниже моя конфигурация:

/etc/nginx/conf.d/domain1.com.conf

server { 
. 
. 
. 

root /opt/nginx/site1/html; 
index index.html index.php; 

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

location /mail { 
    root /opt/nginx/; 
    try_files $uri $uri/mail mail/index.php;   
} 

location ~ [^/]\.php(/|$) { 
    # SECURITY : Zero day Exploit Protection 
    try_files $uri =404; 
    fastcgi_split_path_info ^(.+?\.php)(/.*)$; 

    fastcgi_pass unix:/var/run/php-fpm.sock; 
    fastcgi_index index.php; 
    include fastcgi_params; 
} 
} 
+0

Я уже пробовал это [ссылка] (http://stackoverflow.com/questions/27066463/nginx-alias-directive-not-working-with-php) –

ответ

1

Вы можете использовать вложенные блоки местоположения для вызова PHP скриптов, которые находятся в другом корне документа.

Как это:

root /opt/nginx/site1/html; 
index index.html index.php; 

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

location ^~ /mail { 
    root /opt/nginx; 
    try_files $uri $uri/ /mail/index.php;   

    location ~ \.php$ { 
     try_files $uri =404;  
     fastcgi_pass unix:/var/run/php-fpm.sock; 
     include fastcgi_params; 
    } 

} 

location ~ \.php$ { 
    try_files $uri =404; 
    fastcgi_pass unix:/var/run/php-fpm.sock; 
    include fastcgi_params; 
} 

Обратите внимание на ^~ модификатор, который позволяет вложенной PHP блок, чтобы иметь приоритет над внешней PHP блока. Я также удалил код пути, который не использовался.

+0

Работал как шарм, так как я не осознать, мне удалось обойти мою проблему делает мягкую ссылку: кд/Opt/Nginx/site1/html пер -s/Opt/Nginx/почта , как почта в настоящее время находится внутри /, никаких изменений в файл конфигурации не был так что я оставил его как: root/opt/nginx/site1/html; index index.html index.php; местоположение/{ try_files $ uri $ uri//index.php?$args; } местоположение ~ \ .php $ { try_files $ uri = 404; fastcgi_pass unix: /var/run/php-fpm.sock; включают fastcgi_params; } , к сожалению, поэтому мне нужно было попросить моего клиента получить разрешение, чтобы добавить мягкую ссылку, теперь я могу управлять всем в файле конфигурации. –