亲爱的ServerFault社区,
两天前我设法让我的网站进入一个功能齐全的状态..大约3小时前的今天,我重新启动了我的linux盒子,发现我的网站不再工作了.我不知道为什么会这样,而且坦率地说我只是觉得我现在正处于一个水平来修复它 – 我真的可以帮到你:)
基本上我所有的Nginx PHP文件都呈现为空白或说明“Permission Denied”
我的网站今天重新启动以来一直很好!格儿.
查看我的错误日志,我可以看到:
@H_403_15@while reading response header from upstream '2014/12/09 21:35:50 [error] 1945#0: *1 FastCGI sent in stderr: "PHP message: PHP Warning: Unknown: Failed to open stream: Permission denied in Unknown on line 0 Unable to open primary script: /usr/share/Nginx/html/PHPinfo.PHP (Permission denied)" while reading response header from upstream,client: 82.15.196.119,server: www.vibeshed.com,request: "GET /PHPinfo.PHP HTTP/1.1",upstream: "fastcgi://127.0.0.1:9000",host: "vibeshed.com"' Unable to open primary script: /usr/share/Nginx/html/PHPinfo.PHP (Permission denied)" while reading response header from upstream,server: vibeshed.com,host: "vibeshed.com" 2014/12/09 20:02:02 [error] 1445#0: *1 FastCGI sent in stderr: "PHP message: PHP Warning: Unknown: Failed to open stream: Permission denied in Unknown on line 0
@H_403_15@# # The default server # server { listen 80; server_name www.vibeshed.com vibeshed.com; root /usr/share/Nginx/html; location / { index index.PHP index.html index.htm; try_files $uri $uri/ /index.PHP?$uri; } error_page 404 /404.html; location = /404.html { root /usr/share/Nginx/html; } error_page 500 502 503 504 /50x.html; location = /50x.html { root /usr/share/Nginx/html; } # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000 # location ~ \.PHP${ root /usr/share/Nginx/html; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.PHP; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } }
PHP-FPM配置:
@H_403_15@; Start a new pool named 'www'. [www] ; The address on which to accept FastCGI requests. ; Valid Syntaxes are: ; 'ip.add.re.ss:port' - to listen on a TCP socket to a specific address on ; a specific port; ; 'port' - to listen on a TCP socket to all addresses on a ; specific port; ; '/path/to/unix/socket' - to listen on a unix socket. ; Note: This value is mandatory. listen = 127.0.0.1:9000 ; Set listen(2) backlog. A value of '-1' means unlimited. ; Default Value: -1 ;listen.backlog = -1 ; List of ipv4 addresses of FastCGI clients which are allowed to connect. ; Equivalent to the FCGI_WEB_SERVER_ADDRS environment variable in the original ; PHP FCGI (5.2.2+). Makes sense only with a tcp listening socket. Each address ; must be separated by a comma. If this value is left blank,connections will be ; accepted from any ip address. ; Default Value: any listen.allowed_clients = 127.0.0.1 ; Set permissions for unix socket,if one is used. In Linux,read/write ; permissions must be set in order to allow connections from a web server. Many ; BSD-derived systems allow connections regardless of permissions. ; Default Values: user and group are set as the running user ; mode is set to 0660 ;listen.owner = nobody ;listen.group = nobody ;listen.mode = 0660 ; Unix user/group of processes ; Note: The user is mandatory. If the group is not set,the default user's group ; will be used. ; RPM: apache Choosed to be able to access some dir as httpd user = Nginx ; RPM: Keep a group allowed to write in log dir. group = Nginx ; Choose how the process manager will control the number of child processes. ; Possible Values: ; static - a fixed number (pm.max_children) of child processes; ; dynamic - the number of child processes are set dynamically based on the ; following directives: ; pm.max_children - the maximum number of children that can ; be alive at the same time. ; pm.start_servers - the number of children created on startup. ; pm.min_spare_servers - the minimum number of children in 'idle' ; state (waiting to process). If the number ; of 'idle' processes is less than this ; number then some children will be created. ; pm.max_spare_servers - the maximum number of children in 'idle' ; state (waiting to process). If the number ; of 'idle' processes is greater than this ; number then some children will be killed. ; Note: This value is mandatory. pm = dynamic ; The number of child processes to be created when pm is set to 'static' and the ; maximum number of child processes to be created when pm is set to 'dynamic'. ; This value sets the limit on the number of simultaneous requests that will be ; served. Equivalent to the ApacheMaxClients directive with mpm_prefork. ; Equivalent to the PHP_FCGI_CHILDREN environment variable in the original PHP ; CGI. ; Note: Used when pm is set to either 'static' or 'dynamic' ; Note: This value is mandatory. pm.max_children = 50 ; The number of child processes created on startup. ; Note: Used only when pm is set to 'dynamic' ; Default Value: min_spare_servers + (max_spare_servers - min_spare_servers) / 2 pm.start_servers = 5 ; The desired minimum number of idle server processes. ; Note: Used only when pm is set to 'dynamic' ; Note: Mandatory when pm is set to 'dynamic' pm.min_spare_servers = 5 ; The desired maximum number of idle server processes. ; Note: Used only when pm is set to 'dynamic' ; Note: Mandatory when pm is set to 'dynamic' pm.max_spare_servers = 35 ; The number of requests each child process should execute before respawning. ; This can be useful to work around memory leaks in 3rd party libraries. For ; endless request processing specify '0'. Equivalent to PHP_FCGI_MAX_REQUESTS. ; Default Value: 0 ;pm.max_requests = 500 ; The URI to view the FPM status page. If this value is not set,no URI will be ; recognized as a status page. By default,the status page shows the following ; information: ; accepted conn - the number of request accepted by the pool; ; pool - the name of the pool; ; process manager - static or dynamic; ; idle processes - the number of idle processes; ; active processes - the number of active processes; ; total processes - the number of idle + active processes. ; The values of 'idle processes','active processes' and 'total processes' are ; updated each second. The value of 'accepted conn' is updated in real time. ; Example output: ; accepted conn: 12073 ; pool: www ; process manager: static ; idle processes: 35 ; active processes: 65 ; total processes: 100 ; By default the status page output is formatted as text/plain. Passing either ; 'html' or 'json' as a query string will return the corresponding output ; Syntax. Example: ; http://www.foo.bar/status ; http://www.foo.bar/status?json ; http://www.foo.bar/status?html ; Note: The value must start with a leading slash (/). The value can be ; anything,but it may not be a good idea to use the .PHP extension or it ; may conflict with a real PHP file. ; Default Value: not set ;pm.status_path = /status ; The ping URI to call the monitoring page of FPM. If this value is not set,no ; URI will be recognized as a ping page. This could be used to test from outside ; that FPM is alive and responding,or to ; - create a graph of FPM availability (rrd or such); ; - remove a server from a group if it is not responding (load balancing); ; - trigger alerts for the operating team (24/7). ; Note: The value must start with a leading slash (/). The value can be ; anything,but it may not be a good idea to use the .PHP extension or it ; may conflict with a real PHP file. ; Default Value: not set ;ping.path = /ping ; This directive may be used to customize the response of a ping request. The ; response is formatted as text/plain with a 200 response code. ; Default Value: pong ;ping.response = pong ; The timeout for serving a single request after which the worker process will ; be killed. This option should be used when the 'max_execution_time' ini option ; does not stop script execution for some reason. A value of '0' means 'off'. ; Available units: s(econds)(default),m(inutes),h(ours),or d(ays) ; Default Value: 0 ;request_terminate_timeout = 0 ; The timeout for serving a single request after which a PHP backtrace will be ; dumped to the 'slowlog' file. A value of '0s' means 'off'. ; Available units: s(econds)(default),or d(ays) ; Default Value: 0 ;request_slowlog_timeout = 0 ; The log file for slow requests ; Default Value: not set ; Note: slowlog is mandatory if request_slowlog_timeout is set slowlog = /var/log/PHP-fpm/www-slow.log ; Set open file descriptor rlimit. ; Default Value: system defined value ;rlimit_files = 1024 ; Set max core size rlimit. ; Possible Values: 'unlimited' or an integer greater or equal to 0 ; Default Value: system defined value ;rlimit_core = 0 ; Chroot to this directory at the start. This value must be defined as an ; absolute path. When this value is not set,chroot is not used. ; Note: chrooting is a great security feature and should be used whenever ; possible. However,all PHP paths will be relative to the chroot ; (error_log,sessions.save_path,...). ; Default Value: not set ;chroot = ; Chdir to this directory at the start. This value must be an absolute path. ; Default Value: current directory or / when chroot ;chdir = /var/www ; Redirect worker stdout and stderr into main error log. If not set,stdout and ; stderr will be redirected to /dev/null according to FastCGI specs. ; Default Value: no ;catch_workers_output = yes ; Limits the extensions of the main script FPM will allow to parse. This can ; prevent configuration mistakes on the web server side. You should only limit ; FPM to .PHP extensions to prevent malicIoUs users to use other extensions to ; exectute PHP code. ; Note: set an empty value to allow all extensions. ; Default Value: .PHP ;security.limit_extensions = .PHP .PHP3 .PHP4 .PHP5 ; Pass environment variables like LD_LIBRARY_PATH. All $VARIABLEs are taken from ; the current environment. ; Default Value: clean env ;env[HOSTNAME] = $HOSTNAME ;env[PATH] = /usr/local/bin:/usr/bin:/bin ;env[TMP] = /tmp ;env[TMPDIR] = /tmp ;env[TEMP] = /tmp ; Additional PHP.ini defines,specific to this pool of workers. These settings ; overwrite the values prevIoUsly defined in the PHP.ini. The directives are the ; same as the PHP SAPI: ; PHP_value/PHP_flag - you can set classic ini defines which can ; be overwritten from PHP call 'ini_set'. ; PHP_admin_value/PHP_admin_flag - these directives won't be overwritten by ; PHP call 'ini_set' ; For PHP_*flag,valid values are on,off,1,true,false,yes or no. ; Defining 'extension' will load the corresponding shared extension from ; extension_dir. Defining 'disable_functions' or 'disable_classes' will not ; overwrite prevIoUsly defined PHP.ini values,but will append the new value ; instead. ; Default Value: nothing is defined by default except the values in PHP.ini and ; specified at startup with the -d argument ;PHP_admin_value[sendmail_path] = /usr/sbin/sendmail -t -i -f www@my.domain.com ;PHP_flag[display_errors] = off PHP_admin_value[error_log] = /var/log/PHP-fpm/www-error.log PHP_admin_flag[log_errors] = on ;PHP_admin_value[memory_limit] = 128M ; Set session path to a directory owned by process user PHP_value[session.save_handler] = files PHP_value[session.save_path] = /var/lib/PHP/session
Nginx全局配置:
@H_403_15@####################################################################### # # This is the main Nginx configuration file. # # More information about the configuration options is available on # * the English wiki - http://wiki.Nginx.org/Main # * the Russian documentation - http://sysoev.ru/Nginx/ # ####################################################################### #---------------------------------------------------------------------- # Main Module - directives that cover basic functionality # # http://wiki.Nginx.org/NginxHttpMainModule # #---------------------------------------------------------------------- user Nginx; worker_processes 4; error_log /var/log/Nginx/error.log; #error_log /var/log/Nginx/error.log notice; #error_log /var/log/Nginx/error.log info; pid /var/run/Nginx.pid; #---------------------------------------------------------------------- # Events Module # # http://wiki.Nginx.org/NginxHttpEventsModule # #---------------------------------------------------------------------- events { worker_connections 1024; } #---------------------------------------------------------------------- # HTTP Core Module # # http://wiki.Nginx.org/NginxHttpCoreModule # #---------------------------------------------------------------------- http { include /etc/Nginx/mime.types; log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; access_log /var/log/Nginx/access.log main; sendfile on; #tcp_nopush on; #keepalive_timeout 0; keepalive_timeout 65; #gzip on; # # The default server # server { listen 80; server_name _; #charset koi8-r; #access_log logs/host.access.log main; location / { root /usr/share/Nginx/html; index index.PHP index.html index.htm; } error_page 404 /404.html; location = /404.html { root /usr/share/Nginx/html; } # redirect server error pages to the static page /50x.html # error_page 500 502 503 504 /50x.html; location = /50x.html { root /usr/share/Nginx/html; } # proxy the PHP scripts to Apache listening on 127.0.0.1:80 # #location ~ \.PHP${ # proxy_pass http://127.0.0.1; #} # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000 # #location ~ \.PHP${ # root html; # fastcgi_pass 127.0.0.1:9000; # fastcgi_index index.PHP; # fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name; # include fastcgi_params; #} # deny access to .htaccess files,if Apache's document root # concurs with Nginx's one # #location ~ /\.ht { # deny all; #} } # Load config files from the /etc/Nginx/conf.d directory include /etc/Nginx/conf.d/*.conf; }
更多配置是在Nginx serves php files as plain text (Mod_Rewrite)
如果您需要我的任何其他信息,请告诉我!
最佳答案
在这种情况下,我要尝试的第一件事是仔细检查您尝试读取的文件的权限,以防启动脚本导致它们被更改. “ls -l / var / www /”会让你看到这个,其中/ var / www /是你的web根.
然后,尝试打开PHP配置中的错误报告,以查看PHP在加载其中一个空白页时是否报告任何其他错误(通常,空白页的原因是发生了致命的PHP错误,但错误报告设置为Off for整个服务器).为此,请添加“display_errors = On;”到PHP-fpm配置.除此之外,您可以取消注释以“info”结尾的行在全局Nginx配置中查看是否记录了任何其他错误.
由于你没有提到你试图解决这个问题的任何步骤,我在这里提到的是基本的第一步:).如果它们不起作用,你可以做更多的事情.