CentOS7上使nginx支持PHP
测试代码
Nginx访问PHP文件的File not found
这个错误很常见,原有有下面两面几种
- php-fpm找不到SCRIPT_FILENAME里执行的php文件
- php-fpm不能访问所执行的php,也就是权限问题
第一种情况
更改配置文件nginx.conf
1
| fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
|
替换成下面
1
| fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
|
然后重新加载nginx配置文件
1
| /etc/init.d/nginx reload
|
第二种情况
两种解决方法:
第一种,就是把你root文件夹设为其他用户允许
第二种,找到你的php-fpm的配置文件,找到下面这段,把apache替换成你要的用户组
1 2 3 4
| ; RPM: apache Choosed to be able to access some dir as httpd user = apache ; RPM: Keep a group allowed to write in log dir. group = apache
|
正确配置Nginx+PHP
网上错误或是坏味道的配置
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| server { listen 80; server_name foo.com;
root /path;
location / { index index.html index.htm index.php;
if (!-e $request_filename) { rewrite . /index.php last; } }
location ~ \.php$ { include fastcgi_params; fastcgi_param SCRIPT_FILENAME /path$fastcgi_script_name; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; } }
|
正确的配置-使用try_files
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| server { listen 80; server_name foo.com;
root /path; index index.html index.htm index.php;
location / { try_files $uri $uri/ /index.php$is_args$args; }
location ~ \.php$ { try_files $uri =404;
include fastcgi.conf; fastcgi_pass 127.0.0.1:9000; } }
|
fastcgi.conf
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_param QUERY_STRING $query_string; fastcgi_param REQUEST_METHOD $request_method; fastcgi_param CONTENT_TYPE $content_type; fastcgi_param CONTENT_LENGTH $content_length;
fastcgi_param SCRIPT_NAME $fastcgi_script_name; fastcgi_param REQUEST_URI $request_uri; fastcgi_param DOCUMENT_URI $document_uri; fastcgi_param DOCUMENT_ROOT $document_root; fastcgi_param SERVER_PROTOCOL $server_protocol; fastcgi_param REQUEST_SCHEME $scheme; fastcgi_param HTTPS $https if_not_empty;
fastcgi_param GATEWAY_INTERFACE CGI/1.1; fastcgi_param SERVER_SOFTWARE nginx/$nginx_version;
fastcgi_param REMOTE_ADDR $remote_addr; fastcgi_param REMOTE_PORT $remote_port; fastcgi_param SERVER_ADDR $server_addr; fastcgi_param SERVER_PORT $server_port; fastcgi_param SERVER_NAME $server_name;
# PHP only, required if PHP was built with --enable-force-cgi-redirect fastcgi_param REDIRECT_STATUS 200;
|
详见: https://huoding.com/2013/10/23/290