NGINX 安装与编译本篇将只针对编译搭建,相关技术(
HTTP2.0
、PHP7
、MariaDB
等)所带来的性能优势可百度、谷歌进行深入了解。
首先需要 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
如果你是 Ubuntu
或 Debian
(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-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官网,按照自己的发行系统与所需数据库版本选择可以得到相关的源,这里以 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
如果想针对当前服务器的
mysql
或mariadb
配置优化,可以使用mysqltuner
检测一下,访问 https://github.com/major/MySQLTuner-perl。