Linux编译安装Nginx以及部署acme证书脚本

本文中的操作过程均在debian10系统下进行,如其他系统存在差异的请自行适配,acme脚本使用cloudflare托管的域名。

安装编译依赖

apt install -y build-essential libpcre3 libpcre3-dev zlib1g-dev openssl libssl-dev

安装gcc编译器、正则库、zlib库、OpenSSL库,依赖都安装完成,就可以下载源码来编译了。

下载Nginx源码

# 下载源码
wget -O nginx.tar.gz https://nginx.org/download/nginx-1.25.3.tar.gz
# 解压源码
tar -xf nginx.tar.gz
# 切换源码目录
cd ./nginx-1.25.3

下载源码后,建立nginx所需的目录。

mkdir -pv /var/cache/nginx/ /etc/nginx/conf.d/ /etc/nginx/modules/ /etc/nginx/ssl/

配置和编译Nginx

接下来就是make环节了,编译时候的参数可以参考官方Nginx文档:http://nginx.org/en/docs/configure.html

如无特殊需求的,一般选择的参数是:

./configure \
--prefix=/etc/nginx \
--user=root \
--group=root \
--sbin-path=/usr/sbin/nginx \
--modules-path=/usr/lib/nginx/modules \
--conf-path=/etc/nginx/nginx.conf \
--error-log-path=/var/log/nginx/error.log \
--http-log-path=/var/log/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 \
--with-file-aio \
--with-threads \
--with-http_addition_module \
--with-http_auth_request_module \
--with-http_dav_module \
--with-http_flv_module \
--with-http_gunzip_module \
--with-http_gzip_static_module \
--with-http_mp4_module \
--with-http_random_index_module \
--with-http_realip_module \
--with-http_secure_link_module \
--with-http_slice_module \
--with-http_ssl_module \
--with-http_stub_status_module \
--with-http_sub_module \
--with-http_v2_module \
--with-http_v3_module \
--with-mail \
--with-mail_ssl_module \
--with-stream \
--with-stream_realip_module \
--with-stream_ssl_module \
--with-stream_ssl_preread_module

其中:

--prefix:Nginx主要安装路径,后续Nginx子目录依照这个变量展开
--user:设置Nginx进程启动时,所属的用户
--group:设置Nginx进程启动时,所属的用户组

如果没有报错的话,就可以编译和安装了。

make && make install

安装完毕后,还需配置systemctl守护,用来管理Nginx。

cat > /etc/systemd/system/nginx.service <<EOF
[Unit]
Description=The NGINX HTTP and reverse proxy server
After=syslog.target network-online.target remote-fs.target nss-lookup.target
Wants=network-online.target

[Service]
Type=forking
PIDFile=/run/nginx.pid
ExecStartPre=/usr/sbin/nginx -t -c /etc/nginx/nginx.conf
ExecStart=/usr/sbin/nginx -c /etc/nginx/nginx.conf
ExecReload=/usr/sbin/nginx -s reload -c /etc/nginx/nginx.conf
ExecStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true

[Install]
WantedBy=multi-user.target

EOF

增加配置文件后,设置开机启动并启动Nginx服务。

systemctl daemon-reload # 载入配置文件
systemctl enable nginx # 设置开机启动
systemctl start nginx # 启动nginx服务
systemctl status nginx # 查看nginx服务状态

修改Nginx配置文件

切换至Nginx目录。

cd /etc/nginx

这里建议使用:https://nginxconfig.io/ 该网站提供Nginx配置文件辅助配置工具。

提供参照本教程环境的反代配置参数:点击打开跳转,默认证书位置就是:/etc/nginx/ssl/

需要修改的地方:1、修改为自己域名,2、反向代理项下修改为自己的反代配置,3、其余配置参照自身情况修改。

修改完毕后,点击网页下方的“Copy Base64”按钮复制参数生成配置,然后粘贴到SSH执行,就会在/etc/nginx目录下生成配置文件的压缩包,最后复制网页上的“使用tar解压新的压缩配置”命令到SSH执行,就会覆盖Nginx配置文件。

到这里Nginx配置已完毕,暂时无需重启Nginx,我们接下来配置acme证书脚本。

SSL初始化

openssl dhparam -out /etc/nginx/dhparam.pem 2048

初始化需要一些时间,初始化完毕后执行cd命令切换回根目录。

安装acme脚本

# email= 参数后面修改为自己的CF账号
curl  https://get.acme.sh | sh -s email=

创建一个bash的alias方便后续调用:

alias acme.sh=~/.acme.sh/acme.sh

录入CF账号以及KEY

# 录入双引号内
export CF_Key=""
export CF_Email=""

cloudflare账号API KEY获取方法如下图:

申请域名证书

# 将www.xxx.com修改为自己的域名,注意提前创建好解析。--server参数可以改成letsencrypt或者buypass
acme.sh --issue --dns dns_cf -d www.xxx.com --server zerossl

安装证书并重载Nginx

# 将www.xxx.com修改为自己的域名
acme.sh --install-cert -d www.xxx.com \
--key-file       /etc/nginx/ssl/www.xxx.com.key  \
--fullchain-file /etc/nginx/ssl/www.xxx.com.crt \
--reloadcmd     "service nginx force-reload"

最后打开域名访问看看是否已生效。若有多个域名要反代的,申请证书以及安装证书分别执行,全部执行完毕后再检查nginx,因为证书未完全部署的话,重载Nginx是会提示失败的,如果没有错误,最后一个证书重载Nginx的时候会成功。

总结

Nginx通过手动编译安装运行的效率是远远高于快速编译的,并且acme脚本自带自动续期功能,非常实用,尽可能实现以最小外挂依赖来达成最高效率。

 

版权声明:
作者:绛霄
链接:https://www.u8899.de/2022/08/29/102/
来源:JAXo's Blog
文章版权归作者所有,未经允许请勿转载。

THE END
分享
二维码