2016-11-02 16 views
0

Apacheを実行すると、PHPアプリケーションの静的ファイルは正常に処理されますが、Nginxを実行するとアクセスが拒否されます。 )をユーザーとして使用します。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> 
+0

設定で変更したいことがいくつかあります。とりわけ 'location/{'ブロックです。ここでは、 'try_files'指示文があるので、' fastcgi_pass'指示文を使用しないでください。見つからない場合は、PHPブロックに渡します。 'try_files $ uri $ uri//index.php$args;' 2番目の '$ uri /'は、マスカレードするディレクトリを再帰するよう指示します。したがって、資産がサブフォルダにある場合、NGINXはそれを見つけることができます。これを省略すると、 'root 'でファイルを検索し、サブフォルダは検索しません。 –

+0

'try_files $ uri /index.php?$ args;'を 'location /'ブロックの 'try_files $ uri $ uri /index.php$args; 'に置き換え、Nginxサーバを再起動しました。静的ファイルへのアクセスは拒否されました。 'fastcgi_pass php5-fpm-sock;を削除すると、phpファイルが解析不能になり、ダウンロードのために提供されました。 – Stephane

答えて

1

これらの2つの場所の:

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

location ~ [^/]\.php(/|$) { 
    fastcgi_split_path_info ^(.+?\.php)(/.*)$; 
    if (!-f $document_root$fastcgi_script_name) { 
    return 404; 
    } 
    include fastcgi_params; 
    fastcgi_param PATH_INFO $fastcgi_path_info; 
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; 
    fastcgi_pass php5-fpm-sock; 
    fastcgi_param HTTPS 'on'; # Make PHP-FPM aware that this vhost is HTTPs enabled 
    fastcgi_param APPLICATION_ENV development; 
    fastcgi_index index.php; 
} 

最初の場所は静的ファイルを処理します。

2番目の場所では、ファイル.phpが処理されます。これは正規表現の場所(~)であるため、一致すると最初の場所よりも優先されるため、.php - ファイルが実行されます。

+0

私が言ったように、実際に静的ファイルにアクセスできるようになりました。しかし、アプリケーションのルートを要求すると、 '502 Bad Gateway'が発生し、エラーログに以下のように表示されます:' [error] 7601#0:* 6上流への接続中にconnect()が失敗しました(111:Connection refused):127.0.0.1 、サーバー:dev.extrapack.group.com、リクエスト: "GET/HTTP/1.1"、アップストリーム: "fastcgi://127.0.0.1:9000"、ホスト: "dev.extrapack.group.com" – Stephane

+0

私自身の設定を使用しましたが、あなたのパターン ' location〜[^ /] \。php(/ | $){'を保ちました。アプリケーションは静的ファイルとともに表示されます。あなたの設定ブロックに何があったのだろうか。しかし、あなたはその問題を解決しました。 – Stephane

+0

私は 'include'と' fastcgi_pass'を混ぜて、これを修正しました。それはあなたのために働くことがうれしいです。 – Digitalkapitaen

関連する問題