# Nginx+phpFPM - error logs



## Demontager (Mar 4, 2013)

I'm trying to configure test server on local machine with Nginx+phpFPM  Php 5.2 and then when worked transfer configs to production VPS. I've chosen that config to save resources(basically VPS has 512mb available.)
 I found few manuals and made my own config of nginx.conf as follows:

```
user www www;
worker_processes 2;
error_log /var/log/nginx/error.log crit;
pid /var/run/nginx.pid;
events {
    worker_connections 1024;
}
http {

 upstream backend {
         server unix:/tmp/php-fpm.sock;
 }
    include /usr/local/etc/nginx/mime.types;
    default_type application/octet-stream;
    access_log off;
    server_tokens off;
    sendfile on;
    client_max_body_size 200m;
    client_body_buffer_size 1m;
    keepalive_timeout 1;
    port_in_redirect off;
    gzip on;
    gzip_http_version 1.1;
    gzip_vary on;
    gzip_comp_level 6;
    gzip_proxied any;
    gzip_types text/plain text/css application/json application/x-javascript application/xml application/xml+rss text/javascript;
    gzip_buffers 16 8k;
    gzip_disable "MSIE [1-6].(?!.*SV1)";
    include /usr/local/etc/nginx/conf.d/*.conf;
}
```
And sample config for one domain:

```
server {
        listen 80;
        server_name www.smak.org;
        rewrite ^ http://smak.org$request_uri?;
error_log /var/log/www/smak.org/nerror.log;
}
server {
        listen 80;
        server_name smak.org;
        server_name_in_redirect off;
        root /usr/local/www/nginx/smak.org;
        index index.php index.html index.htm;
        location ~* ^.+\.(ico|js|gif|jpg|jpeg|png|bmp)$ {
          expires 30d;
        }
        location / {
            try_files $uri $uri/ /index.php;
        }
        location ~ \.php$ {
                    # fastcgi_split_path_info ^(.+\.php)(.*)$;
                    fastcgi_pass   backend;
                fastcgi_param  DOCUMENT_ROOT    $document_root;
                fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
                fastcgi_param  PATH_TRANSLATED  $document_root$fastcgi_script_name;


  include fastcgi_params;
  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_intercept_errors        on;
  fastcgi_ignore_client_abort     off;
  fastcgi_connect_timeout 60;
  fastcgi_send_timeout 180;
  fastcgi_read_timeout 180;
  fastcgi_buffer_size 128k;
  fastcgi_buffers 4 256k;
  fastcgi_busy_buffers_size 256k;
  fastcgi_temp_file_write_size 256k;

        }
        location ~ /\.ht {
            deny all;
        }
}
```


The problem that when i try open website's root in browser it generate an error -

```
HTTP Error 500 (Internal Server Error):
```
But i can't see any logs regarding misconfiguration, despite logs usage set in php-fpm.conf -

```
<?xml version="1.0" ?>
<!-- $FreeBSD: ports/lang/php52/files/php-fpm.conf.sample.in,v 1.2 2012/11/17 05:58:55 svnexp Exp $ -->
<configuration>

	All relative paths in this config are relative to php's install prefix

	<section name="global_options">

		Pid file
		<value name="pid_file">/var/run/php-fpm/php-fpm.pid</value>

		Error log file
		<value name="error_log">/var/log/php-fpm/php-fpm.log</value>

		Log level
		<value name="log_level">error</value>

		When this amount of php processes exited with SIGSEGV or SIGBUS ...
		<value name="emergency_restart_threshold">10</value>

		... in a less than this interval of time, a graceful restart will be initiated.
		Useful to work around accidental curruptions in accelerator's shared memory.
		<value name="emergency_restart_interval">1m</value>

		Time limit on waiting child's reaction on signals from master
		<value name="process_control_timeout">5s</value>

		Set to 'no' to debug fpm
		<value name="daemonize">yes</value>

	</section>

	<workers>

		<section name="pool">

			Name of pool. Used in logs and stats.
			<value name="name">default</value>

			Address to accept fastcgi requests on.
			Valid syntax is 'ip.ad.re.ss:port' or just 'port' or '/path/to/unix/socket'
			<value name="listen_address">/tmp/php-fpm.sock</value>

			<value name="listen_options">

				Set listen(2) backlog
				<value name="backlog">-1</value>

				Set permissions for unix socket, if one used.
				In Linux read/write permissions must be set in order to allow connections from web server.
				Many BSD-derrived systems allow connections regardless of permissions.
				<value name="owner">www</value>
				<value name="group">www</value>
				<value name="mode">0666</value>
			</value>

			Additional php.ini defines, specific to this pool of workers.
			<value name="php_defines">
		<!--		<value name="sendmail_path">/usr/sbin/sendmail -t -i</value>		-->
		<!--		<value name="display_errors">0</value>								-->
			</value>

			Unix user of processes
			<value name="user">www</value>

			Unix group of processes
			<value name="group">www</value>

			Process manager settings
			<value name="pm">

				Sets style of controling worker process count.
				Valid values are 'static' and 'apache-like'
				<value name="style">static</value>

				Sets the limit on the number of simultaneous requests that will be served.
				Equivalent to Apache MaxClients directive.
				Equivalent to PHP_FCGI_CHILDREN environment in original php.fcgi
				Used with any pm_style.
				<value name="max_children">5</value>

				Settings group for 'apache-like' pm style
				<value name="apache_like">

					Sets the number of server processes created on startup.
					Used only when 'apache-like' pm_style is selected
					<value name="StartServers">20</value>

					Sets the desired minimum number of idle server processes.
					Used only when 'apache-like' pm_style is selected
					<value name="MinSpareServers">5</value>

					Sets the desired maximum number of idle server processes.
					Used only when 'apache-like' pm_style is selected
					<value name="MaxSpareServers">35</value>

				</value>

			</value>

			The timeout (in seconds) for serving a single request after which the worker process will be terminated
			Should be used when 'max_execution_time' ini option does not stop script execution for some reason
			'0s' means 'off'
			<value name="request_terminate_timeout">0s</value>

			The timeout (in seconds) for serving of single request after which a php backtrace will be dumped to slow.log file
			'0s' means 'off'
			<value name="request_slowlog_timeout">0s</value>

			The log file for slow requests
			<value name="slowlog">logs/slow.log</value>

			Set open file desc rlimit
			<value name="rlimit_files">1024</value>

			Set max core size rlimit
			<value name="rlimit_core">0</value>

			Chroot to this directory at the start, absolute path
			<value name="chroot"></value>

			Chdir to this directory at the start, absolute path
			<value name="chdir"></value>

			Redirect workers' stdout and stderr into main error log.
			If not set, they will be redirected to /dev/null, according to FastCGI specs
			<value name="catch_workers_output">yes</value>

			How much requests each process should execute before respawn.
			Useful to work around memory leaks in 3rd party libraries.
			For endless request processing please specify 0
			Equivalent to PHP_FCGI_MAX_REQUESTS
			<value name="max_requests">500</value>

			Comma separated list of ipv4 addresses of FastCGI clients that allowed to connect.
			Equivalent to FCGI_WEB_SERVER_ADDRS environment in original php.fcgi (5.2.2+)
			Makes sense only with AF_INET listening socket.
			<value name="allowed_clients">127.0.0.1</value>

			Pass environment variables like LD_LIBRARY_PATH
			All $VARIABLEs are taken from current environment
			<value name="environment">
				<value name="HOSTNAME">$HOSTNAME</value>
				<value name="PATH">/usr/local/bin:/usr/bin:/bin</value>
				<value name="TMP">/tmp</value>
				<value name="TMPDIR">/tmp</value>
				<value name="TEMP">/tmp</value>
				<value name="OSTYPE">$OSTYPE</value>
				<value name="MACHTYPE">$MACHTYPE</value>
				<value name="MALLOC_CHECK_">2</value>
			</value>

		</section>

	</workers>

</configuration>
```

Website root contained PhpMyAdmin files also tried Drupal7 same HTTP Error 500. But I may open single file contained only phpinfo() function.


----------



## Carpetsmoker (Mar 5, 2013)

First make sure that static files (eg. an image, html file, etc.) works.

If this _doesn't_ work, then your basic nginx setup has a problem. Check your nginx error log (/var/log/nginx/error.log and/or /var/log/www/smak.org/nerror.log), note you're only logging critical errors right now, you may want to setup some more logging.

If this _does_ work, the problem is in your PHP or php-fpm configuration, or perhaps the PHP<->nginx connection. Check the nginx logfile and the php-fpm logfile (/var/log/php-fpm/php-fpm.log).

If you're unsure, post the contents of the logfiles.


----------



## SirDice (Mar 5, 2013)

PHP 5.2 has been end-of-life for more than two years. It contains various security bugs, don't use that version.

http://www.php.net/eol.php


----------



## Demontager (Mar 5, 2013)

Ok, will do try to make the Internet safer and discard to use PHP 5.2.  Well, now fully cleaned up system from PHP 5.2 and installed PHP 5.3 with extensions. Moreover, after that, websites which tried on 5.2 before are now working fine on 5.3, tested phpmyadmin, Drupal7 and Joomla 3. 

To be more safe I want to establish per website isolation similar to 
	
	



```
php_admin_value open_basedir "/somedir"
```
 cleared php-fpm.conf and it looks:

```
[global]
pid = run/php-fpm.pid

error_log = log/php-fpm.log

syslog.ident = php-fpm

log_level = notice

;;;;;;;;;;;;;;;;;;;;
; Pool Definitions ; 
;;;;;;;;;;;;;;;;;;;;

[www]

user = www
group = www


listen = /tmp/php-fpm.sock

pm = dynamic

pm.max_children = 5

pm.start_servers = 2

pm.min_spare_servers = 1

pm.max_spare_servers = 3
```

What will be optimal for 512mb VPS?


----------



## SirDice (Mar 6, 2013)

Demontager said:
			
		

> Ok, will do try to make the Internet safer and discard to use PHP 5.2.


That's the spirit :beer



> What will be optimal for 512mb VPS?


The defaults are usually fine. Fine tuning takes some time, just let it run for a while and see how things go. Then try to change some of those values and see what happens. If it doesn't improve change them back and change some other setting. Every situation is different, you just need to find the correct one for your setup.


----------

