LNMP 服务器搭建之 Nginx 和 PHP 的编译安装

2 篇文章 0 订阅
1 篇文章 0 订阅

一、安装、升级所需的程序库
1、利用CentOS Linux系统自带的yum命令安装、升级所需的程序库

yum update -y
yum -y install gcc gcc-c++ autoconf libjpeg libjpeg-devel libpng libpng-devel freetype freetype-devel libxml2 libxml2-devel zlib zlib-devel glibc glibc-devel glib2 glib2-devel bzip2 bzip2-devel ncurses ncurses-devel curl curl-devel e2fsprogs e2fsprogs-devel krb5 krb5-devel libidn libidn-devel openssl openssl-devel openldap openldap-devel nss_ldap openldap-clients openldap-servers patch git libtool automake telnet bison bind-utils jwhois setuptool ntsysv 

2、编译安装高版本的cmake

yum remove cmake -y
wget https://cmake.org/files/v3.12/cmake-3.12.4.tar.gz
tar -zxvf cmake-3.12.4.tar.gz
cd cmake-3.12.4
./bootstrap
gmake && gmake install

ln -s /usr/local/bin/cmake /usr/bin/

二、到官网下载 Nginx 和 PHP 的源码包
http://nginx.org (nginx官网)
http://www.php.net (php官网)

1、创建新的目录用于保存下载的源码包,在该目录下下载Nginx,PHP源码包

mkdir -p /myDownload/software
cd  /myDownload/software
wget http://nginx.org/download/nginx-1.16.0.tar.gz
wget https://www.php.net/distributions/php-7.3.7.tar.gz

三、编译安装Nginx
1、创建www用户和组

/usr/sbin/groupadd www
/usr/sbin/useradd -g www www

2、解压并编译安装Nginx

cd  /myDownload/software
tar zxf nginx-1.16.0.tar.gz
cd nginx-1.16.0/
./configure --user=www --group=www --prefix=/usr/local/nginx  --with-http_ssl_module --with-http_sub_module --with-http_v2_module
//编译安装
make && make install

3、创建Nginx日志目录

mkdir -p /nginx/logs
chmod +w /nginx/logs
chown -R www:www /nginx/logs

4、从新编写 nginx.conf 文件,内容如下 (注意 :当浏览器使用ip访问的时候,会被指向第一个server)

user  www www;
worker_processes  8;

pid        logs/nginx.pid;


events {
   use epoll;
   worker_connections 65535;
}


http {
    include       mime.types;
    default_type  application/octet-stream;

    sendfile        on;
    #tcp_nopush     on;

    keepalive_timeout  65;
   
   log_format  access '$remote_addr - $remote_user [$time_local] "$request" "$uri" $status $body_bytes_sent $request_time $upstream_response_time "$http_referer" "$http_user_agent" $http_x_forwarded_for "$server_name" "$http_host" "$cookie_userid" "$http_cookie" "$request_body"';

  server_names_hash_bucket_size 128;
  client_header_buffer_size 32k;
  large_client_header_buffers 4 32k;
  client_max_body_size 8m;
  
  keepalive_timeout 60;
  server_tokens off;

  fastcgi_connect_timeout 300;
  fastcgi_send_timeout 300;
  fastcgi_read_timeout 300;
  fastcgi_buffer_size 64k;
  fastcgi_buffers 4 64k;
  fastcgi_busy_buffers_size 128k;
  fastcgi_temp_file_write_size 128k;

  gzip on;
  gzip_min_length  1k;
  gzip_buffers     4 16k;
  gzip_http_version 1.0;
  gzip_comp_level 2;
  gzip_types       text/plain application/x-javascript text/css application/xml application/javascript;
  gzip_vary on;

     upstream myfastcgi {
      server 127.0.0.1:9000 weight=2;
  }

    server {
        listen       80;
        server_name  localhost;
        
        location / {
            root   html;
            index  index.html index.htm;
        }

        #error_page  404              /404.html;
        # redirect server error pages to the static page /50x.html
        #
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }

        # 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  $document_root$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;
        #}
    }
    
    include vhost/*.conf;
}

5、创建fcgi.conf文件

vi /usr/local/nginx/conf/fcgi.conf

输入以下内容:

fastcgi_param  GATEWAY_INTERFACE  CGI/1.1;
fastcgi_param  SERVER_SOFTWARE    nginx;

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;
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  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;

6、建立 nginx.service 文件

vi /usr/lib/systemd/system/nginx.service

在末尾添加如下内容

[Unit]
Description=nginx
After=network.target

[Service]
Type=forking
ExecStart=/usr/local/nginx/sbin/nginx
ExecReload=/usr/local/nginx/sbin/nginx -s reload
ExecStop=/usr/local/nginx/sbin/nginx -s quit
PrivateTmp=true
[Install]
WantedBy=multi-user.target

7、启动 Nginx 并加入启动项

ulimit -SHn 65535
systemctl start nginx.service
// 把 nginx 加入到开机启动项
systemctl enable nginx.service

四、编译安装 PHP(FastCGI模式)
1、下载PHP 所需扩展库

1.1、libzip库 和 zlib库(提供数据压缩用的函式库)

# 移除旧的libzip
yum remove libzip
# 下载编译安装 libzip
wget https://libzip.org/download/libzip-1.5.1.tar.gz
tar zxf libzip-1.5.1.tar.gz 
cd libzip-1.5.1/
mkdir build && cd build 
cmake ..
make && make install

 wget http://www.zlib.net/zlib-1.2.11.tar.gz
 tar -zxf zlib-1.2.11.tar.gz
 cd zlib-1.2.11
 ./configure
 make && make install

1.2、pcre库(rewrite的支持)

wget https://ftp.pcre.org/pub/pcre/pcre-8.42.tar.gz
tar -zxf pcre-8.42.tar.gz
cd pcre-8.42
 ./configure
 make && make install

1.3、libiconv库(字符编码转换)

wget https://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.15.tar.gz
tar -zxf libiconv-1.15.tar.gz
cd libiconv-1.15
./configure
 make && make install

1.4、jpeg库(图片库)

wget http://www.ijg.org/files/jpegsrc.v9a.tar.gz
tar -zxf jpegsrc.v9a.tar.gz
cd jpeg-9a/
./configure
make libdir=/usr/lib64
make libdir=/usr/lib64 install

1.5、libmcrypt库(加密算法)

wget ftp://mcrypt.hellug.gr/pub/crypto/mcrypt/libmcrypt/libmcrypt-2.5.7.tar.gz
tar -zxf libmcrypt-2.5.7.tar.gz
cd libmcrypt-2.5.7
./configure
make && make install
/sbin/ldconfig
cd libltdl/
./configure --enable-ltdl-install
make && make install

ln -s /usr/local/lib/libmcrypt.la /usr/lib/libmcrypt.la
ln -s /usr/local/lib/libmcrypt.so /usr/lib/libmcrypt.so
ln -s /usr/local/lib/libmcrypt.so.4 /usr/lib/libmcrypt.so.4
ln -s /usr/local/lib/libmcrypt.so.4.4.8 /usr/lib/libmcrypt.so.4.4.8
ln -s /usr/local/lib/libmhash.a /usr/lib/libmhash.a
ln -s /usr/local/lib/libmhash.la /usr/lib/libmhash.la
ln -s /usr/local/lib/libmhash.so /usr/lib/libmhash.so
ln -s /usr/local/lib/libmhash.so.2 /usr/lib/libmhash.so.2
ln -s /usr/local/lib/libmhash.so.2.0.1 /usr/lib/libmhash.so.2.0.1
ln -s /usr/local/bin/libmcrypt-config /usr/bin/libmcrypt-config
export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH

1.6、mhash库(加密)

wget http://nchc.dl.sourceforge.net/project/mhash/mhash/0.9.9.9/mhash-0.9.9.9.tar.gz
tar -zxf mhash-0.9.9.9.tar.gz
cd mhash-0.9.9.9
./configure
make && make install

1.7、ImageMagick

wget http://www.imagemagick.org/download/ImageMagick-7.0.8-53.tar.gz
tar -zxf ImageMagick-7.0.8-53.tar.gz
cd ImageMagick-7.0.8-53
ldconfig /usr/local/lib
./configure
make && make install
ln -s /usr/local/include/ImageMagick-7 /usr/local/include/ImageMagick
export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig

2、编译安装PHP

./configure \
--prefix=/usr/local/webserver \
--with-config-file-path=/usr/local/webserver/php/etc \
--with-fpm-user=www \
--with-fpm-group=www \
--with-mysqli=mysqlnd \
--with-pdo-mysql=mysqlnd \
--with-iconv-dir=/usr/local \
--with-freetype-dir \
--with-jpeg-dir \
--with-png-dir \
--with-zlib \
--with-libxml-dir=/usr \
--enable-xml \
--disable-rpath \
--enable-bcmath \
--enable-shmop \
--enable-sysvsem \
--enable-inline-optimization \
--with-curl \
--enable-mbregex \
--enable-fpm \
--enable-mbstring \
--with-gd \
--with-openssl \
--with-mhash \
--enable-pcntl \
--enable-sockets \
--with-xmlrpc \
--enable-zip \
--enable-soap \
--enable-opcache \
--enable-exif \
--without-pear \
--enable-ftp \
--with-gettext \
--disable-fileinfo \
--enable-maintainer-zts

make ZEND_EXTRA_LIBS='-liconv' && make install
cp php.ini-production /usr/local/webserver/php/etc/php.ini

3、编译安装PHP扩展模块
3.1、imagick模块

wget http://pecl.php.net/get/imagick-3.4.3.tgz
tar imagick-3.4.3.tgz
cd imagick-3.4.3/
/usr/local/webserver/php/bin/phpize
 ./configure --with-php-config=/usr/local/webserver/php/bin/php-config
 make && make install

3.2、redis模块

git clone git://github.com/nicolasff/phpredis
cd phpredis
git submodule init
git submodule update
/usr/local/webserver/php/bin/phpize
./configure --with-php-config=/usr/local/webserver/php/bin/php-config
make && make install

4、修改php.ini

vi /usr/local/webserver/php/etc/php.ini

修改如下

# 查找 ; extension_dir = "./" 修改为 extension_dir = "/usr/local/php/lib/php/extensions/no-debug-zts-20170718/" 并添加extension = "imagick.so" extension = "redis.so"
; extension_dir = "./"
extension_dir = "/usr/local/php/lib/php/extensions/no-debug-zts-20170718/"
extension = "imagick.so"
extension = "redis.so"

# 查找 ; date.timezone = 改为 date.timezone = Asia/Hong_Kong
; date.timezone =
date.timezone = Asia/Hong_Kong

# 查找 ; log_errors = Off 改为 log_errors = On
; log_errors = Off
log_errors = On

# 查找 ; error_log = php_errors.log 改为 error_log = /var/log/php/errors.log
; error_log = php_errors.log
error_log = /var/log/php/errors.log

# 查找 disable_functions = 改为如下
disable_functions = passthru,exec,system,shell_exec,chroot,chgrp,chown,proc_open,proc_get_status,ini_alter,ini_restore,dl,openlog,syslog,readlink,symlink,popepassthru,fsocket,popen

# 查找 expose_php 改为
expose_php = Off

创建日志目录

mkdir /var/log/php

5、创建php-fpm配置文件

cd /usr/local/webserver/php/etc/
vi php-fpm.conf

可参考如下配置(less /usr/local/webserver/php/etc/php-fpm.conf | grep -v “^KaTeX parse error: Got function '\newline' with no arguments as superscript at position 1: \̲n̲e̲w̲l̲i̲n̲e̲”)

[global]
pid = /usr/local/webserver/php/php-fpm.pid
error_log = /var/log/php/php-fpm.log
syslog.facility = daemon
syslog.ident = php-fpm
log_level = error
emergency_restart_threshold = 10
emergency_restart_interval = 1s
process_control_timeout = 5s
rlimit_files = 65535
rlimit_core = 0
[www]
user = www
group = www
listen = 127.0.0.1:9000
listen.backlog = 65535
listen.owner = www
listen.group = www
listen.mode = 0666
pm = static
pm.max_children = 128
pm.start_servers = 20
pm.min_spare_servers = 5
pm.max_spare_servers = 50
pm.max_requests = 1024
pm.status_path = /status
ping.path = /ping
ping.response = pong
access.log = /var/log/php/access.log
access.format = "%R - %u %t \\"%m %r%Q%q\\" %s %f %{mili}d %{kilo}M %C%%"
slowlog = /var/log/php/slow.log
request_slowlog_timeout = 1s
request_terminate_timeout = 0
rlimit_files = 65535
rlimit_core = 0
catch_workers_output = yes
php_flag[display_errors] = yes

6、建立 php-fpm.service 文件并启动 php
拷贝 php-fpm.service 到 /usr/lib/systemd/

cp /myDownload/software/php-7.2.8/sapi/fpm/php-fpm.service /usr/lib/systemd/system/
ulimit -SHn 65535
systemctl start php-fpm.service

# 把 php-fpm.service 相关命令
systemctl stop php-fpm.service # 停止
systemctl start php-fpm.service # 启动
systemctl restart php-fpm.service # 重启
systemctl enable php-fpm.service # 加入启动项

注:
错误解决
1、 error: off_t undefined; check your library configuration

# 添加搜索路径到配置文件
echo '/usr/local/lib64
/usr/local/lib
/usr/lib
/usr/lib64'>>/etc/ld.so.conf
# 更新配置
ldconfig -v
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值