#nginx #php
#nginx #php
Вопрос:
У меня возникла проблема с настройкой nginx и php-fpm. SEO-дружественные URL-адреса не работают, и когда я пытаюсь использовать прямой маршрут, я получаю цикл перенаправления 301 в браузере.
Вот конфигурация nginx
# redirect non-www to www
server {
listen 8081;
server_name MYSITEURL.com;
rewrite ^(.*) http://www.MYSITEURL.com$1 permanent;
}
server {
listen 8081;
server_name www.MYSITEURL.com;
rewrite_log on;
access_log /var/www/vhosts/MYSITEURL.com/statistics/logs/access_log.nginx combined;
error_log /var/www/vhosts/MYSITEURL.com/statistics/logs/error_log.nginx warn;
root /var/www/vhosts/MYSITEURL.com/httpdocs;
index index.php index.html index.htm default.html default.htm;
if (!-e $request_filename) {
rewrite ^(. )$ /navigation.php?q=$1 last;
}
location / {
try_files $uri $uri/ /navigation.php?q=$uriamp;$args;
}
# deny running scripts inside writable directories
location ~* /(images|cache|media|logs|tmp)/.*.(php|pl|py|jsp|asp|sh|cgi)$ {
return 403;
error_page 403 /403_error.html;
}
location ~ .php$ {
try_files $uri =404;
fastcgi_pass unix:/var/run/php-fpm/www9.sock;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include /etc/nginx/fastcgi.conf;
}
location ~ /. {
access_log off;
log_not_found off;
deny all;
}
location ~* .(jpg|jpeg|gif|png|css|zip|tgz|gz|rar|bz2|doc|xls|exe|pdf|ppt|txt|tar|wav|bmp|rtf|js|ico|swf)$ {
expires max;
add_header Pragma public;
add_header Cache-Control "public, must-revalidate, proxy-revalidate";
access_log off;
log_not_found off;
}
}
server {
listen 8081;
server_name webmail.MYSITEURL.com;
error_log /var/log/httpd/webmail.MYSITEURL.com.log warn;
location / {
proxy_pass http://webmail.MYSITEURL.com:8080$request_uri;
include /etc/nginx/proxy.conf;
}
location ~* ^. .(jpg|jpeg|gif|css|png|js|ico|txt|srt|swf|zip|rar|html|htm|pdf)$ {
root /usr/share/psa-horde ;
expires 7d;
}
}
server {
listen 8081;
server_name sitebuilder.MYSITEURL.com;
error_log /var/log/httpd/sitebuilder.MYSITEURL.com.log warn;
location / {
proxy_pass http://MYIP:8080$request_uri;
include /etc/nginx/proxy.conf;
}
}
server {
listen 8081;
server_name lists.MYSITEURL.com;
error_log /var/log/httpd/lists.MYSITEURL.com.log warn;
location / {
proxy_pass http://MYIP:8080$request_uri;
include /etc/nginx/proxy.conf;
}
}
Это файл htaccess, который поставляется вместе со скриптом, который я запускаю:
Options FollowSymLinks
RewriteEngine On
AddEncoding gzip .gz
AddEncoding gzip .gzip
<FilesMatch ".(js.gz|js.gzip)$">
ForceType text/javascript
</FilesMatch>
<FilesMatch ".(css.gz|css.gzip)$">
ForceType text/css
</FilesMatch>
RewriteCond %{REQUEST_URI} !^/index.php
RewriteCond %{REQUEST_URI} !/ow_updates/index.php
RewriteCond %{REQUEST_URI} !/ow_updates/
RewriteCond %{REQUEST_URI} !/ow_cron/run.php
RewriteCond %{REQUEST_URI} (/|.php|.html|.htm|.xml|.feed|robots.txt|.raw|/[^.]*)$ [NC]
RewriteRule (.*) index.php
apache vhost, пытается удалить перенаправление для номера порта в url. MYURL.com ссылка на MYURL.com:8081
<VirtualHost MY.IP.ADDRESS:8080>
ServerName MYURL.com:8080
ServerAlias www.MYURL.com
UseCanonicalName Off
ServerAdmin "myadmin@email.com"
DocumentRoot /var/www/vhosts/MYURL.com/httpdocs
CustomLog /var/www/vhosts/MYURL.com/statistics/logs/access_log plesklog
ErrorLog /var/www/vhosts/MYURL.com/statistics/logs/error_log
<IfModule mod_userdir.c>
UserDir /var/www/vhosts/MYURL.com/web_users
</IfModule>
<IfModule mod_ssl.c>
SSLEngine off
</IfModule>
<Directory /var/www/vhosts/MYURL.com/httpdocs>
<IfModule sapi_apache2.c>
php_admin_flag engine on
php_admin_flag safe_mode on
php_admin_value open_basedir "/var/www/vhosts/MYURL.com/httpdocs:/tmp"
</IfModule>
<IfModule mod_php5.c>
php_admin_flag engine on
php_admin_flag safe_mode on
php_admin_value open_basedir "/var/www/vhosts/MYURL.com/httpdocs:/tmp"
</IfModule>
Options -Includes -ExecCGI
</Directory>
<Directory /var/www/vhosts/MYURL.com/web_users>
<IfModule sapi_apache2.c>
php_admin_flag engine off
</IfModule>
<IfModule mod_php5.c>
php_admin_flag engine off
</IfModule>
</Directory>
</VirtualHost>
Комментарии:
1. Можете ли вы удалить часть « if (!-e $ request_filename) { rewrite ^(. ) $ /navigation.php?q = $ 1 last; }` и посмотреть, что произойдет? Не забудьте перезапустить nginx, кстати
2. да, это сработало! Спасибо. Другая проблема, с которой я сталкиваюсь, заключается в том, что номер порта указан в URL. mysite.com перенаправляет на mysite.com:8081. Видите ли вы что-нибудь в nginx, что это сделает? Для этого также есть экземпляр apache, и он может быть там
3. Не то, что я вижу. Это ваш единственный виртуальный хост? Можете ли вы выполнить
netstat -putan
в командной строке, чтобы увидеть, какие порты используются nginx?4. tcp 0 0 0.0.0.0:8081 0.0.0.0:* LISTEN 21690/nginx.conf В именованном процессе также около десяти строк. Существует виртуальный хост apache, который прослушивает 8080 и псевдоним URL-адреса. Я опубликую это в следующем комментарии