xgqfrms™, xgqfrms® : xgqfrms's offical website of cnblogs! xgqfrms™, xgqfrms® : xgqfrms's offical website of GitHub!

How To Install Linux & Nginx & MySQL & PHP (LEMP) stack on Raspberry Pi 3 All In One

How To Install Linux & Nginx & MySQL & PHP (LEMP) stack on Raspberry Pi 3 All In One

Raspberry Pi 3, LEMP, Nginx, PHP, LEMP (not LNMP)

      Raspberry Pi 3,LEMP,Linux,Nginx,PHP(PHP-FPM), MySQL(MariaDB         

Nginx (pronounced "Engine x") is a free, open-source, high-performance HTTP server.

Nginx is known for its stability, rich feature set, simple configuration, and low resource consumption.

This tutorial shows how you can install Nginx on an Ubuntu 14.04 server with PHP5 support (through PHP-FPM) and MySQL support (LEMP = Linux + Nginx (pronounced "Engine x") + MySQL + PHP) .

 

What’s a LEMP stack?

LEMP is a variation of the ubiquitous LAMP stack used for developing and deploying web applications. Traditionally, LAMP consists of Linux, Apache, MySQL, and PHP. Due to its modular nature, the components can easily be swapped out. With LEMP, Apache is replaced with the lightweight yet powerful Nginx.

 

Why LEMP instead of LNMP?

We go with LEMP due to the pronunciation for Nginx: Engine-X (en-juhn-ecks). Think of how in English, the article an is used instead of a for hour even though it begins with a consonant. The importance is the sound of the first letter rather than its written representation. Besides, LEMP is actually pronounceable and doesn’t sound like reciting the alphabet.

 

https://lemp.io/

 

 

1

https://www.howtoforge.com/installing-nginx-with-php5-fpm-and-mysql-on-ubuntu-14.04-lts-lemp

Installing Nginx With PHP5 (And PHP-FPM) And MySQL Support (LEMP)

On Ubuntu 14.04 LTS

https://www.howtoforge.com/tutorial/installing-nginx-with-php-and-mysql-on-ubuntu-lemp/

Installing Nginx with PHP and MariaDB (as MySQL replacement) - LEMP

on Ubuntu 15.10 (Wiley Werewolf)

 

 

 

1

 

1

 

1

 

1

1

 

1

1

 

1

1

 

1

1 . PHP FastCGI Example

https://www.nginx.com/resources/wiki/start/topics/examples/phpfcgi/

This example is for newer PHP (>= 5.3.3) using the included PHP FPM (FastCGI Process Manager).

This guide assume PHP FPM already installed and configured either using tcp port (127.0.0.1:9000) or unix socket (/var/run/php-fpm.sock).

There are many guide about configuring NGINX with PHP FPM, but many of them are incomplete (doesn’t handle PATH_INFO correctly) or contain security issues (doesn’t check whether the script is indeed php file).

FastCGI Params

First thing, I recommend keeping all your typical FCGI settings in a single file and importing them.

For example on debian and ubuntu by default there is /etc/nginx/fastcgi_params file that should looks like this:

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_FILENAME \(document_root\)fastcgi_script_name;
fastcgi_param SCRIPT_NAME \(fastcgi_script_name<span class="p">; <span class="k">fastcgi_param <span class="s">PATH_INFO <span class="nv">\)fastcgi_path_info;
fastcgi_param PATH_TRANSLATED \(document_root\)fastcgi_path_info;
fastcgi_param REQUEST_URI \(request_uri<span class="p">; <span class="k">fastcgi_param <span class="s">DOCUMENT_URI <span class="nv">\)document_uri;
fastcgi_param DOCUMENT_ROOT \(document_root<span class="p">; <span class="k">fastcgi_param <span class="s">SERVER_PROTOCOL <span class="nv">\)server_protocol;

fastcgi_param GATEWAY_INTERFACE CGI/1.1;
fastcgi_param SERVER_SOFTWARE nginx/$nginx_version;

fastcgi_param REMOTE_ADDR \(remote_addr<span class="p">; <span class="k">fastcgi_param <span class="s">REMOTE_PORT <span class="nv">\)remote_port;
fastcgi_param SERVER_ADDR \(server_addr<span class="p">; <span class="k">fastcgi_param <span class="s">SERVER_PORT <span class="nv">\)server_port;
fastcgi_param SERVER_NAME $server_name;

fastcgi_param HTTPS $https;

# PHP only, required if PHP was built with --enable-force-cgi-redirect
fastcgi_param REDIRECT_STATUS 200;

Please note if you’re using Ubuntu Precise (12.04), I change SCRIPT_FILENAME and add PATH_INFO params.

Connecting NGINX to PHP FPM

Now we must tell NGINX to proxy requests to PHP FPM via the FCGI protocol:

location ~ [^/]\.php(/|$) {
    fastcgi_split_path_info ^(.+?\.php)(/.*)$;
    if (!-f $document_root$fastcgi_script_name) {
        return 404;
    }
<span class="kn">fastcgi_pass <span class="n">127.0.0.1<span class="p">:<span class="mi">9000<span class="p">;
<span class="kn">fastcgi_index <span class="s">index.php<span class="p">;
<span class="kn">include <span class="s">fastcgi_params<span class="p">;

}

If you’re using unix socket change fastcgi_pass to:

fastcgi_pass unix:/var/run/php5-fpm.sock;

Restart NGINX.

Testing

Create test.php on NGINX document root containing just:

<?php var_export($_SERVER)?>

In the browser try to request: # /test.php # /test.php/ # /test.php/foo # /test.php/foo/bar.php # /test.php/foo/bar.php?v=1

Pay attention to the value of REQUEST_URI, SCRIPT_NAME, PATH_INFO and PHP_SELF.

Here’s the correct output for http://lemp.test/test.php/foo/bar.php?v=1

array (
  'USER' => 'www-data',
  'HOME' => '/var/www',
  'FCGI_ROLE' => 'RESPONDER',
  'QUERY_STRING' => 'v=1',
  'REQUEST_METHOD' => 'GET',
  'CONTENT_TYPE' => '',
  'CONTENT_LENGTH' => '',
  'SCRIPT_FILENAME' => '/var/www/test.php',
  'SCRIPT_NAME' => '/test.php',
  'PATH_INFO' => '/foo/bar.php',
  'REQUEST_URI' => '/test.php/foo/bar.php?v=1',
  'DOCUMENT_URI' => '/test.php/foo/bar.php',
  'DOCUMENT_ROOT' => '/var/www',
  'SERVER_PROTOCOL' => 'HTTP/1.1',
  'GATEWAY_INTERFACE' => 'CGI/1.1',
  'SERVER_SOFTWARE' => 'nginx/1.4.0',
  'REMOTE_ADDR' => '192.168.56.1',
  'REMOTE_PORT' => '44644',
  'SERVER_ADDR' => '192.168.56.3',
  'SERVER_PORT' => '80',
  'SERVER_NAME' => '',
  'HTTPS' => '',
  'REDIRECT_STATUS' => '200',
  'HTTP_HOST' => 'lemp.test',
  'HTTP_USER_AGENT' => 'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:20.0) Gecko/20100101 Firefox/20.0',
  'HTTP_ACCEPT' => 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
  'HTTP_ACCEPT_LANGUAGE' => 'en-US,en;q=0.5',
  'HTTP_ACCEPT_ENCODING' => 'gzip, deflate',
  'HTTP_CONNECTION' => 'keep-alive',
  'PHP_SELF' => '/test.php/foo/bar.php',
  'REQUEST_TIME' => 1367829847,
)

Notes

  1. The location regex capable to handle PATH_INFO and properly check that the extension indeed .php (not .phps) whether there is PATH_INFO or not.
  2. The fastcgi_split_path_info regex capable to correctly handle request like /test.php/foo/blah.php or /test.php/.
  3. The if lets NGINX check whether the *.php does indeed exist to prevent NGINX to feeding PHP FPM non php script file (like uploaded image).

Some guides recommend to use try_files instead of if, if you do that, beware of NGINX bug #321. I personally think ifis more appropriate for this, even If Is Evil agree this is one of the 100% safe thing to use if with.

This guide run fine on php.ini cgi.fix_pathinfo = 1 (the default). Some guide insist to change it to cgi.fix_pathinfo =0 but doing that make PHP_SELF variable broken (not equal to DOCUMENT_URI).

refs

PHP FPM (FastCGI Process Manager)

https://www.nginx.com/resources/wiki/start/topics/examples/phpfcgi/



©xgqfrms 2012-2021

www.cnblogs.com/xgqfrms 发布文章使用:只允许注册用户才可以访问!

原创文章,版权所有©️xgqfrms, 禁止转载 🈲️,侵权必究⚠️!


posted @ 2016-04-07 00:54  xgqfrms  阅读(96)  评论(6编辑  收藏  举报