本站服务器配置,基于Centos 7

2020-03-28 19:56:34Tags: centos nginx http2 https

所有配置都是基于Centos 7.4 X64

我将所有下载的包都放在/usr/local/src目录下

首先安装需要的系统工具

yum install unzip git

Cloudflare 补丁

主要使用了 Cloudflare 的 ChaCha20/Poly1305 for OpenSSL 补丁

cd /usr/local/src
git clone https://github.com/cloudflare/sslconfig.git

升级OpenSSL

由于系统自带的OpenSSL通常版本过低,所以需要直接将其升级到最新,这也是为后面启用http2做准备

查看本机OpenSSL的版本

openssl version

Centos 7.4自带的版本为1.0,而要想开启http2,则必须升级到1.1及以上版本,前往OpenSSL官网查看最新版本,在写本文的时候最新版为1.1.0g,接下来开始升级

下载及解压:

cd /usr/local/src
# 下载
wget -O openssl.tar.gz -c https://www.openssl.org/source/openssl-fips-2.0.16.tar.gz

# 解压
tar zxf openssl.tar.gz

# 重命名为openssl
mv openssl-OpenSSL_1_1_1g/ openssl

打上 ChaCha20/Poly1305 补丁:

cd openssl
patch -p1 < ../sslconfig/patches/openssl__1.1.0_chacha20_poly1305.patch

编译并安装:

./config
make && make install

等待编译完成,安装完成后,此刻openssl默认被安装到了/usr/local/目录,生成的文件会在ssl目录里,而执行文件会在bin目录里

查看当前版本的openssl目录

which openssl

开始升级

# 移除旧版本
mv /usr/bin/openssl /usr/bin/openssl.bak

# 拷贝刚编译好的openssl-1.1.0g
cp /usr/local/bin/openssl /usr/bin/openssl
cp -r /usr/local/ssl /usr/include/openssl

# 这里没有用ln软链的原因是因为如果使用ln可能在后续安装中造成其他软件的安装错误
# 如果直接执行命令openssl version会报错
# 添加libssl.so.1.1
cp /usr/local/lib64/libssl.so.1.1 /usr/lib64/libssl.so.1.1
cp /usr/local/lib64/libcrypto.so.1.1 /usr/lib64/libcrypto.so.1.1

# 查看版本
openssl version

# 重新加载动态链接库
ldconfig -v

成功完成以上步骤就代表着已经升级完成。

编译并安装 Nginx

先获取一些组件

获取nginx-ct

nginx-ct 模块用于启用 Certificate Transparency 功能。直接从 github 上获取源码:

cd /usr/local/src

wget -O nginx-ct.zip -c https://github.com/grahamedgecombe/nginx-ct/archive/v1.3.2.zip
unzip nginx-ct.zip

获取ngx_brotli

Google 开发的 Brotli 压缩格式,它通过内置分析大量网页得出的字典,实现了更高的压缩比率,同时几乎不影响压缩 / 解压速度。 以下是让 Nginx 支持 Brotli 所需。首先安装 libbrotli:

yum install autoconf libtool automake

cd /usr/local/src

git clone https://github.com/bagder/libbrotli
cd libbrotli

./autogen.sh

./configure
make && make install

获取 ngx_brotli 源码:

git clone https://github.com/google/ngx_brotli.git
cd ngx_brotli

git submodule update --init

编译 Nginx 还需要一些依赖和工具:

yum install gcc-c ++ pcre-devel zlib-devel make wget openssl-devel libxml2-devel libxslt-devel gd-devel perl-ExtUtils-Embed GeoIP-devel gperftools-devel

获取 Nginx 源码,并打上 Dynamic TLS Records 补丁:

cd /usr/local/src

wget -c https://nginx.org/download/nginx-1.12.2.tar.gz
tar zxf nginx-1.12.2.tar.gz

cd nginx-1.12.2/
patch -p1 < ../sslconfig/patches/nginx_1.13.1_http2_hpack.patch

然后是编译和安装:

cd nginx-1.12.2/
./configure --add-module=../ngx_brotli --add-module=../nginx-ct-1.3.2 --with-openssl=../openssl --with-http_v2_module --with-http_ssl_module --with-http_gzip_static_module

make && make install

注:从 Nginx 1.11.5 开始,ipv6 模块已经内置

这里只开启了http_v2http_sslhttp_gzip_static三个模块,需要开启其他的自己可以查询官方文档

Nginx默认安装在/usr/local/nginx/,可以在 configure 时指定其他路径 安装完成后,就可以直接启动Ninx服务了,这里可以给nginx添加软链接,以便快捷使用:

ln -s /usr/local/nginx/sbin/nginx /usr/bin/nginx

# 那么现在就可以直接在命令中使用nginx了
nginx -v

Nginx自启动配置

centos 7以上是用Systemd进行系统初始化的,Systemd 是 Linux 系统中最新的初始化系统(init),它主要的设计目标是克服 sysvinit 固有的缺点,提高系统的启动速度。 Systemd服务文件以.service结尾,比如现在要建立nginx为开机启动,如果用yum install命令安装的,yum命令会自动创建nginx.service文件,直接用命令systemcel enable nginx.service设置开机启动即可。

因为nginx是自己编译安装的,所以需要手动创建服务文件:

vi /lib/systemd/system/nginx.service

写入以下内容:

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

然后设置开机启动

systemctl enable nginx.service    #开启开机启动
systemctl start nginx     #直接启动

.service文件说明:

[Unit]:服务的说明
Description:描述服务
After:描述服务类别
[Service]服务运行参数的设置
Type=forking是后台运行的形式
ExecStart为服务的具体运行命令
ExecReload为重启命令
ExecStop为停止命令
PrivateTmp=True表示给服务分配独立的临时空间
注意:[Service]的启动、重启、停止命令全部要求使用绝对路径
[Install]运行级别下服务安装的相关设置,可设置为多用户,即系统运行级别为3

其他命令:

systemctl start nginx.service              #启动nginx服务
systemctl enable nginx.service             #设置开机自启动
systemctl disable nginx.service            #停止开机自启动
systemctl status nginx.service             #查看服务当前状态
systemctl restart nginx.service           #重新启动服务
systemctl list-units --type=service        #查看所有已启动的服务

至此,Nginx已安装完成。

Nodejs安装

使用官方二进制包安装:

wget https://nodejs.org/dist/v8.9.1/node-v8.9.1-linux-x64.tar.xz

解压并安装

tar -zvxf node-v8.9.1

# 添加软链
ln -s /usr/local/nodejs/bin/node /usr/bin/node
ln -s /usr/local/nodejs/bin/npm /usr/bin/npm

node -v
npm -v

未完待续...