手记

LEMP编译部署HTTP2.0、PHP7详解

本篇将只针对编译搭建,相关技术(HTTP2.0PHP7MariaDB 等)所带来的性能优势可百度、谷歌进行深入了解。

NGINX 安装与编译

首先需要 openssl ,可以到官网 www.openssl.org 下载 >1.0.1的版本,上传到服务器内,比如以 openssl-1.1.0f.tar.gz 文件为例。

使用 http2.0 协议则需要提供 openssl 大于1.0.1的版本。

如果你是 CentOS 系统,那么可以直接进行解压 openssl-1.1.0f.tar.gz

tar -xvzf /文件路径/openssl-1.1.0f.tar.gz

如果你是 UbuntuDebian(CentOS请忽略这步),你需要先删除旧的 openssl 版本,然后重新编译安装,另外请注意安装 build-essential

# 安装编译环境
apt-get install build-essential
# 进入目录
cd /文件路径/openssl-1.1.0f
# 配置编译
./config
# 无缺失依赖可直接进行编译
make && make install

# 另外需要重建链接,(64位系统为lib64)
ln -s /usr/local/lib/libssl.so.1.1 /usr/lib/libssl.so.1.1
ln -s /usr/local/lib/libcrypto.so.1.1 /usr/lib/libcrypto.so.1.1
ln -s /usr/local/bin/openssl /usr/bin/openssl

NGINX 也需要到官网下载,请使用最新的 Stable version 版本,同理上传服务器内,比如以 nginx-1.12.1.tar.gz 文件为例,解压并进入目录内。

tar -xvzf /文件路径/nginx-1.12.1.tar.gz
cd /文件路径/nginx-1.12.1

NGINX 依赖安装

# CentOS 执行
yum install gcc gcc-c++ autoconf automake zlib zlib-devel pcre-devel

# Ubuntu/Debian 执行
apt-get install build-essential libpcre3 libpcre3-dev autoconf zlib1g-dev

编译配置

./configure \
--error-log-path=/var/logs/nginx/error.log \
--http-log-path=/var/logs/nginx/access.log \
--pid-path=/var/run/nginx.pid \
--lock-path=/var/run/nginx.lock \
--http-client-body-temp-path=/var/cache/nginx/client_temp \
--http-proxy-temp-path=/var/cache/nginx/proxy_temp \
--http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp \
--http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp \
--http-scgi-temp-path=/var/cache/nginx/scgi_temp \
--user=nginx \
--group=nginx \
--with-openssl=/文件路径/openssl-1.1.0f \
--with-http_ssl_module \
--with-http_realip_module \
--with-http_addition_module \
--with-http_sub_module \
--with-http_dav_module \
--with-http_flv_module \
--with-http_mp4_module \
--with-http_gunzip_module \
--with-http_gzip_static_module \
--with-http_random_index_module \
--with-http_secure_link_module \
--with-http_stub_status_module \
--with-http_auth_request_module \
--with-mail \
--with-debug \
--with-mail_ssl_module \
--with-file-aio \
--with-threads \
--with-stream \
--with-stream_ssl_module \
--with-http_slice_module \
--with-http_v2_module

执行编译

make && make install

安装完成后,添加用户组,并检测nginx正确性

groupadd -r nginx
useradd -s /sbin/nologin -g nginx -r nginx
# 根据自定情况
mkdir /var/cache/nginx
mkdir /var/nginx

下面可以按照我的nginx.conf来配置参考,路径 /usr/local/nginx/conf

# 这里修改用户组
user nginx nginx;
# 根据个人情况设置进程数,一般为1即可
worker_processes auto;
# 设置error_log、pid、lock_file路径
error_log /var/run/error.log info;
pid /var/run/nginx.pid;
lock_file /var/run/nginx.lock;

events {
    worker_connections 4096;
    accept_mutex off;
}

http {
    include mime.types;
    server_names_hash_bucket_size 64;
    default_type application/octet-stream;
    access_log off;
    aio threads;

    sendfile on;
    sendfile_max_chunk 512k;
    client_max_body_size 256m;

    tcp_nopush on;
    tcp_nodelay on;

    keepalive_timeout 5;
    # gizp设置
    gzip on;
    gzip_disable "MSIE [1-6].(?!.*SV1)";
    gzip_http_version 1.1;
    gzip_vary on;
    gzip_proxied any;
    gzip_min_length 1000;
    gzip_buffers 16 8k;
    gzip_comp_level 6;
    gzip_types text/plain text/css text/xml text/javascript application/json application/x-javascript application/xml application/xml+rss;

    log_format main $remote_addr - $remote_user [$time_local] "$request"  $status $body_bytes_sent "$http_referer"  "$http_user_agent" "$http_x_forwarded_for";
    # 代理设置
    proxy_connect_timeout 5;
    proxy_read_timeout 60;
    proxy_send_timeout 5;
    proxy_buffer_size 16k;
    proxy_buffers 4 64k;
    proxy_busy_buffers_size 128k;
    proxy_temp_file_write_size 128k;
    proxy_temp_path /var/nginx/proxy_temp;
    # 禁止默认公网ip访问
    server {
        listen 80 default;
        return 404;
    }
    # 虚拟目录配置目录
    include vhost/**/*.conf;
}

之后创建一个目录在vhost内,例如 site内部包含配置、证书、签名。

配置可以命名为site.conf,证书与签名以(crt.crt、key.key)为例。
证书可以去腾讯云或七牛云免费申请

# 路径.../vhost/site/site.conf
server {
    listen  80;
    server_name <域名>;
    rewrite ^(.*)$  https://$host$1 permanent;
}

server {
    listen 443 ssl http2;
    listen [::]:443 ssl http2;

    server_name <域名>;
    charset utf-8;
    # 证书签名配置
    ssl_certificate vhost/site/crt.crt;
    ssl_certificate_key vhost/site/key.key;
    ssl_session_cache shared:SSL:20m;
    ssl_session_timeout 10m;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_prefer_server_ciphers on;
    ssl_ciphers ECDH+AESGCM:ECDH+AES256:ECDH+AES128:DH+3DES:!ADH:!AECDH:!MD5;

    root <虚拟目录路径>;

    location / {
        aio threads=default;
        index index.html index.php;
    }

    error_page 404 403 /404.html;
    error_page 500 502 503 504 /50x.html;
    # php代理
    location ~ \.php$ {
        fastcgi_pass 127.0.0.1:9000;
        fastcgi_index index.php;
        fastcgi_split_path_info ^((?U).+\.php)(/?.+)$;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }
}

配置完成后 nginx -t 检查,如果没有配置到PATH,可以直接建立链接 ln -s /usr/local/nginx/sbin/nginx /usr/sbin/nginx 。检查无误后运行 nginx,访问可先放置一个index.html 文件,然后访问域名,http2.0可通过浏览器开发者工具的Network查看Protocol是否显示为h2验证。

PHP 编译安装

首先到php官网下载php源码,这里以 php-7.1.9.tar.gz为例,解压并进入目录。

tar -xvzf /文件路径/php-7.1.9.tar.gz
cd /文件路径/php-7.1.9

PHP安装编译依赖

# CentOS
yum install -y libacl libacl-devel libxml2 libxml2-devel openssl openssl-devel bzip2 bzip2-devel libcurl libcurl-devel enchant enchant-devel gd gd-devel gmp gmp-devel libmcrypt libmcrypt-devel libtidy libtidy-devel libxslt libxslt-devel

# Ubuntu/Debian
apt-get install libacl1 libacl1-dev libxml2 libxml2-dev libbz2-dev libcurl3 libcurl3-dev enchant libenchant-dev libjpeg-dev libpng-dev libxpm-dev libfreetype6-dev libgmp-dev libgmp3-dev libmcrypt-dev libtidy-dev libxslt-dev

Ubuntu / Debian 如出现GMP错误,则需要手动建立链接,例如 ln -s /usr/include/x86_64-linux-gnu/gmp.h /usr/include/gmp.h

执行编译配置

./configure \
--disable-debug \
--disable-rpath \
--enable-fpm \
--with-fpm-user=nginx \
--with-fpm-group=nginx \
--with-fpm-acl \
--with-libxml-dir \
--with-openssl \
--with-kerberos \
--with-pcre-regex \
--with-zlib \
--enable-bcmath \
--with-bz2 \
--enable-calendar \
--with-curl \
--enable-dba \
--with-enchant \
--enable-exif \
--disable-fileinfo \
--with-pcre-dir \
--enable-ftp \
--with-gd \
--with-jpeg-dir \
--with-png-dir \
--with-zlib-dir \
--with-xpm-dir \
--with-freetype-dir \
--enable-gd-native-ttf \
--with-gettext \
--with-gmp \
--with-mhash \
--enable-mbstring \
--enable-mbregex \
--with-mcrypt \
--with-mysqli \
--enable-embedded-mysqli \
--with-mysql-sock=/tmp/mysql.sock \
--enable-pcntl \
--with-pdo-mysql \
--enable-session \
--enable-shmop \
--enable-soap \
--enable-sockets \
--enable-sysvsem \
--with-tidy \
--enable-wddx \
--with-xmlrpc \
--enable-xml \
--with-iconv-dir \
--with-xsl \
--enable-zip \
--enable-mysqlnd \
--without-pear \
--enable-shared

完成后,执行编译安装

make && make install

安装结束后,需要到 /usr/local/etc 内的.default复制并去掉.default扩展名,将 php-fpm.conf 文件最底部的配置路径修改正确,例如 `include=/usr/local/etc/php-fpm.d/.conf`。

完成后可以直接运行 php-fpm,将之前配置的虚拟目录下放置 phpinfo.php 文件,访问查看是否解析成功。

MariaDB 安装

访问MariaDB官网,按照自己的发行系统与所需数据库版本选择可以得到相关的源,这里以 CentOS7& MariaDB 10.2 为例,选择后得到MariaDB.repo。

# MariaDB 10.2 CentOS repository list - created 2017-09-13 14:53 UTC
# http://downloads.mariadb.org/mariadb/repositories/
[mariadb]
name = MariaDB
baseurl = http://yum.mariadb.org/10.2/centos7-amd64
gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
gpgcheck=1

将该文件上传至 /etc/yum.repos.d/内,更新源并使用yum管理包安装 mariadb

yum update
yum install MariaDB-server MariaDB-client

安装完成后,启动服务并初始化设置。

systemctl start mysql
# 初始化请按照提示定义自己所需
mysql_secure_installation

如果想针对当前服务器的mysqlmariadb配置优化,可以使用mysqltuner检测一下,访问 https://github.com/major/MySQLTuner-perl

10人推荐
随时随地看视频
慕课网APP