Мои статические файлы приложения PHP всегда работают при запуске Apache, но им запрещается доступ при запуске Nginx, хотя оба HTTP-сервера используют моего собственного пользователя (тот, который я вхожу в систему на своем Linux-машине,) в качестве своего пользователя.Статические файлы, обслуживаемые Apache, но не Nginx
Поэтому проблема заключается в конфигурации Nginx или php-fpm.
Вот некоторые из nginx.conf
содержания:
user stephane;
worker_processes 1;
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
gzip on;
gzip_disable "msie6";
gzip_vary on;
gzip_proxied any;
gzip_comp_level 6;
gzip_buffers 16 8k;
gzip_http_version 1.1;
gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript;
upstream php5-fpm-sock {
server unix:/home/stephane/programs/install/php5-fpm.sock;
}
server {
listen 80;
server_name localhost;
charset utf-8;
location/{
root html;
index index.html index.htm;
}
location ~ \.php$ {
try_files $uri = 404;
fastcgi_index index.php;
fastcgi_pass php5-fpm-sock;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
location ~ /\. {
access_log off;
log_not_found off;
deny all;
}
}
include conf.d/*.conf;
include sites-enabled/*;
}
Вот Nginx виртуальной конфигурации хоста:
server {
listen 443;
server_name dev.extrapack.group.com;
root /home/stephane/dev/php/projects/Extrapack-Mon/public;
ssl on;
ssl_certificate /home/stephane/programs/install/nginx/conf/sites-available/extrapack.group.com.crt;
ssl_certificate_key /home/stephane/programs/install/nginx/conf/sites-available/extrapack.group.com.key;
location /simplesaml {
index index.php;
alias /usr/share/simplesaml/www;
location ~ ^/simplesaml/(module\.php)(/.+)$ {
include fastcgi_params;
fastcgi_pass php5-fpm-sock;
fastcgi_split_path_info ^/simplesaml/(module\.php)(/.+)$;
fastcgi_param SCRIPT_FILENAME /usr/share/simplesaml/www/$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_index index.php;
}
location ~ \.php$ {
include fastcgi_params;
fastcgi_pass php5-fpm-sock;
}
}
location/{
include fastcgi_params;
fastcgi_pass php5-fpm-sock;
fastcgi_split_path_info ^(.+\.php)(.*)$;
try_files $uri /index.php?$args;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_param HTTPS 'on'; # Make PHP-FPM aware that this vhost is HTTPs enabled
fastcgi_param APPLICATION_ENV development;
fastcgi_index index.php;
}
}
и конфигурации виртуального хоста Apache (который прекрасно работает доступ ко всем статические ресурсы) :
<VirtualHost *:443>
ServerName dev.extrapack.group.com
DocumentRoot "/home/stephane/dev/php/projects/Extrapack-Mon/public"
<Directory "/home/stephane/dev/php/projects/Extrapack-Mon/public">
Options Indexes FollowSymLinks Includes
AllowOverride All
Require all granted
</Directory>
</VirtualHost>
Есть несколько вещей, которые вы хотите изменить в своей конфигурации, в частности, 'location/{' block. Здесь у вас не должно быть директивы 'fastcgi_pass', потому что у вас есть директива' try_files'. Если он не может найти его, он передает его в php-блок. В любом случае измените свою директиву 'try_files' следующим образом:' try_files $ uri $ uri//index.php$args; 'Наличие второго' $ uri/'сообщает ему, чтобы он перезаписывал любую директорию, которая вычисляет. Поэтому, если ваши активы находятся в подпапках, NGINX может их найти. Если это не указано, оно будет искать в 'root' для файла, а не вложенных папок. –
Я заменил 'try_files $ uri /index.php? $ Args;' на 'try_files $ uri $ uri//index.php$args;' в блоке 'location /' и перезапустил сервер Nginx, но мой пользователь все еще запретил доступ к статическим файлам. Удаление «fastcgi_pass php5-fpm-sock;» сделало файлы php неповторимыми и предлагаемыми для загрузки. – Stephane