如何在Fedora 25上从源代码编译Nginx

注:本教程在Vultr VPS上测试通过,如需部署请前往Vultr.com

NGINX 可用作HTTP / HTTPS服务器,反向代理服务器,邮件代理服务器,负载平衡器,TLS终结器或缓存服务器。它在设计上是相当模块化的。它具有社区创建的本机模块和第三方模块。它使用C编程语言编写,是一款非常快速,轻巧的软件。

注意:NGINX有两个并行运行的版本流-稳定版和主线版。两种版本都可以在生产服务器上使用。建议在生产中使用主线版本。

从源代码安装NGINX相对“容易”-下载最新版本的NGINX源代码,进行配置,构建和安装。

在本教程中,我将使用主线版本,撰写本文时为1.13.3。有较新版本可用时,请相应地更新版本号。

从源代码构建NGINX的要求

强制要求:

的OpenSSL 1.0.2-1.1.0之间的库版本
zlib 1.1.3-1.2.11之间的库版本
聚四氟乙烯 介于4.4-8.41之间的库版本
海湾合作委员会 编译器

可选要求:

佩尔
libatomic_ops
LibGD
MaxMind GeoIP
libxml2
libxslt

在你开始之前

创建普通用户 sudo 访问:

切换到新用户:

su - 

更新系统:

sudo dnf check-update || sudo dnf upgrade -y

从源代码构建NGINX

安装“开发工具”,Vim编辑器,wget和gcc-c ++:

sudo dnf install -y @development-tools && sudo dnf install -y vim wget gcc-c++

下载最新版本的NGINX源代码主版本并将其解压缩:

wget https://nginx.org/download/nginx-1.13.3.tar.gz && tar zxvf nginx-1.13.3.tar.gz

下载NGINX依赖项的源代码并解压缩它们:

NGINX依赖于3个库: 聚四氟乙烯zlib的OpenSSL

# PCRE version 8.41
wget https://ftp.pcre.org/pub/pcre/pcre-8.41.tar.gz && tar xzvf pcre-8.41.tar.gz

# zlib version 1.2.11
wget https://www.zlib.net/zlib-1.2.11.tar.gz && tar xzvf zlib-1.2.11.tar.gz

# OpenSSL version 1.1.0f
wget https://www.openssl.org/source/openssl-1.1.0f.tar.gz && tar xzvf openssl-1.1.0f.tar.gz

下载并安装可选的NGINX依赖项:

# perl
sudo dnf install -y perl perl-devel perl-ExtUtils-Embed

# libxslt
sudo dnf install -y libxslt libxslt-devel

# libxml2
sudo dnf install -y libxml2 libxml2-devel

# libgd
sudo dnf install -y gd gd-devel

# GeoIP
sudo dnf install -y GeoIP GeoIP-devel

# Libatomic_Ops
sudo dnf install -y libatomic_ops libatomic_ops-devel

移除所有 .tar.gz 文件。我们不再需要它们:

rm -rf *.tar.gz

转到NGINX源目录:

cd ~/nginx-1.13.3

为了更好地衡量,请列出NGINX源代码文件和目录:

ls
# auto  CHANGES  CHANGES.ru  conf  configure  contrib  html  LICENSE  man  README  src

将NGINX手册页复制到 /usr/share/man/man8/

sudo cp ~/nginx-1.13.3/man/nginx.8 /usr/share/man/man8/
sudo gzip /usr/share/man/man8/nginx.8
# Check that Man page for NGINX is working
man nginx

为了获得帮助,您可以通过运行以下命令列出可用的配置开关:

./configure --help
# To see want core modules can be build as dynamic run:
./configure --help | grep -F =dynamic

配置,编译和安装NGINX:

./configure --prefix=/etc/nginx 
            --sbin-path=/usr/sbin/nginx 
            --modules-path=/usr/lib64/nginx/modules 
            --conf-path=/etc/nginx/nginx.conf 
            --error-log-path=/var/log/nginx/error.log 
            --pid-path=/var/run/nginx.pid 
            --lock-path=/var/run/nginx.lock 
            --user=nginx 
            --group=nginx 
            --build=Fedora 
            --builddir=nginx-1.13.3 
            --with-select_module 
            --with-poll_module 
            --with-threads 
            --with-file-aio 
            --with-http_ssl_module 
            --with-http_v2_module 
            --with-http_realip_module 
            --with-http_addition_module 
            --with-http_xslt_module=dynamic 
            --with-http_image_filter_module=dynamic 
            --with-http_geoip_module=dynamic 
            --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_auth_request_module 
            --with-http_random_index_module 
            --with-http_secure_link_module 
            --with-http_degradation_module 
            --with-http_slice_module 
            --with-http_stub_status_module 
            --with-http_perl_module=dynamic 
            --with-perl=/usr/bin/perl 
            --http-log-path=/var/log/nginx/access.log 
            --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-mail=dynamic 
            --with-mail_ssl_module 
            --with-stream=dynamic 
            --with-stream_ssl_module 
            --with-stream_realip_module 
            --with-stream_geoip_module=dynamic 
            --with-stream_ssl_preread_module 
            --with-compat 
            --with-pcre=../pcre-8.41 
            --with-pcre-jit 
            --with-zlib=../zlib-1.2.11 
            --with-openssl=../openssl-1.1.0f 
            --with-openssl-opt=no-nextprotoneg 
            --with-debug

make
sudo make install

打印NGINX版本,编译器版本并配置脚本参数:

nginx -V

# nginx version: nginx/1.13.3 (Fedora)
# built by gcc 6.3.1 20161221 (Red Hat 6.3.1-1) (GCC)
# built with OpenSSL 1.1.0f  25 May 2017
# TLS SNI support enabled
# configure arguments: --prefix=/etc/nginx . . .
# . . .

创建NGINX系统用户和组:

sudo useradd --system --home /var/cache/nginx --shell /sbin/nologin --comment "nginx user" --user-group nginx

检查语法和潜在错误:

sudo nginx -t
# Will throw this error: nginx: [emerg] mkdir() "/var/cache/nginx/client_temp" failed (2: No such file or directory)
# Just create directory
sudo mkdir -p /var/cache/nginx/ && sudo nginx -t

为NGINX创建一个系统化的单位文件:

sudo vim /etc/systemd/system/nginx.service

复制/粘贴以下内容:

注意:的位置 PID 文件和NGINX二进制文件可能会有所不同,具体取决于NGINX的编译方式。

[Unit]
Description=Nginx - A high performance web server and a reverse proxy server
Documentation=http://nginx.org/en/docs/
After=network.target

[Service]
Type=forking
PIDFile=/var/run/nginx.pid
ExecStartPre=/usr/sbin/nginx -t -q -g 'daemon on; master_process on;'
ExecStart=/usr/sbin/nginx -g 'daemon on; master_process on;'
ExecReload=/usr/sbin/nginx -g 'daemon on; master_process on;' -s reload
ExecStop=-/sbin/start-stop-daemon --quiet --stop --retry QUIT/5 --pidfile /var/run/nginx.pid
TimeoutStopSec=5
KillMode=mixed

[Install]
WantedBy=multi-user.target

启动NGINX:

sudo systemctl start nginx.service

启用NGINX以在启动时自动启动:

sudo systemctl enable nginx.service

检查NGINX是否在重启后启动:

sudo systemctl is-enabled nginx.service
# enabled

检查NGINX是否正在运行:

sudo systemctl status nginx.service
ps aux | grep nginx
curl -I 127.0.0.1

重新启动您的VPS以验证NGINX是否自动启动:

sudo shutdown -r now

从中删除旧文件 /etc/nginx/ 目录:

sudo rm /etc/nginx/koi-utf /etc/nginx/koi-win /etc/nginx/win-utf

放置NGINX配置的语法突出显示文件,用于 vim 进入 ~/.vim/。编辑NGINX配置文件时,将为您提供漂亮的语法突出显示:

mkdir ~/.vim/
cp -r ~/nginx-1.13.3/contrib/vim/* ~/.vim/

做一个 conf.d/ 目录中 /etc/nginx/ 目录。在此目录中,您可以放置​​虚拟服务器和上游服务器:

sudo mkdir /etc/nginx/conf.d/

从主目录中删除提取的目录和文件:

rm -rf nginx-1.13.3/ openssl-1.1.0f/ pcre-8.41/ zlib-1.2.11/

结论

而已。现在,您已经安装了NGINX的最新版本。它是根据一些重要的库(如OpenSSL)静态编译的。通常,系统OpenSSL版本已过时。通过使用较新版本的OpenSSL进行安装的方法,您可以利用新的密码,例如 CHACHA20_POLY1305 和类似的协议 TLS 1.3 将在OpenSSL中提供 1.1.1 (在撰写本文时尚未发布)。

注:本教程在Vultr VPS上测试通过,如需部署请前往Vultr.com