如何在CentOS 7上从源代码编译nginx
Anne655
・10 分钟阅读
使用不同的系统?
NGINX可用作HTTP/HTTPS服务器,反向代理服务器,邮件代理服务器,负载平衡器,TLS terminator或缓存服务器。它的设计相当模块化,拥有由社区创建的模块和第三方模块,用C编程语言编写,它是一个非常快速和轻量级的软件。
注:Nginx有两个版本流并行运行-稳定和主线,两个版本都可以在生产服务器上使用,建议在生产中使用主线版本。
从源代码安装Nginx相对"轻松"-下载最新版本的Nginx源代码,配置,构建和安装它。
在本教程中,我将使用主线版本,在编写本文时是1.13.2,更新新版本时要相应更新版本号。
从源代码生成Nginx的要求
强制要求:
可选要求:
开始之前
- 创建有
sudo
访问权限的常规用户 , 切换到新用户:
su - <username>
更新系统:
sudo yum check-update || sudo yum update -y
从源代码生成Nginx
安装"开发工具"和Vim编辑器:
sudo yum groupinstall -y 'Development Tools' && sudo yum install -y vim
安装额外的Packages for Enterprise Linux (EPEL ):
sudo yum install -y epel-release
下载并安装可选的Nginx依赖项:
sudo yum install -y perl perl-devel perl-ExtUtils-Embed libxslt libxslt-devel libxml2 libxml2-devel gd gd-devel GeoIP GeoIP-devel
下载最新版本的Nginx源代码主线,并且提取它:
wget https://nginx.org/download/nginx-1.13.2.tar.gz && tar zxvf nginx-1.13.2.tar.gz
下载Nginx依赖项源代码并提取它们:
# PCRE version 8.40 wget https://ftp.pcre.org/pub/pcre/pcre-8.40.tar.gz && tar xzvf pcre-8.40.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
删除所有
.tar.gz
文件,我们不再需要它们了:rm -rf *.tar.gz
转到Nginx源目录:
cd ~/nginx-1.13.2
为了更好的衡量,列出nginx源代码文件和目录:
ls # auto CHANGES CHANGES.ru conf configure contrib html LICENSE man README src
将Nginx手册页复制到
/usr/share/man/man8
:sudo cp ~/nginx-1.13.2/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=CentOS --builddir=nginx-1.13.2 --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 --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.40 --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
链接
/usr/lib64/nginx/modules
到/etc/nginx/modules
目录,这样你就可以像这样在Nginx配置中加载动态模块,load_module modules/ngx_foo_module.so;
:sudo ln -s /usr/lib64/nginx/modules /etc/nginx/modules
打印Nginx版本,编译器版本,并配置脚本参数:
sudo nginx -V # nginx version: nginx/1.13.2 (CentOS) # built by gcc 4.8.5 20150623 (Red Hat 4.8.5-11) (GCC) # built with OpenSSL 1.1.0f 25 May 2017 # TLS SNI support enabled # configure arguments: --prefix=/etc/nginx --sbin-path=/usr/sbin/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创建一个systemd单元文件:
sudo vim /usr/lib/systemd/system/nginx.service
复制/粘贴以下内容:
注:根据Nginx的编译方式,PID文件的位置和Nginx二进制文件的位置可能有所不同。
[Unit] Description=nginx - high performance web server Documentation=https://nginx.org/en/docs/ After=network-online.target remote-fs.target nss-lookup.target Wants=network-online.target [Service] Type=forking PIDFile=/var/run/nginx.pid ExecStartPre=/usr/sbin/nginx -t -c /etc/nginx/nginx.conf ExecStart=/usr/sbin/nginx -c /etc/nginx/nginx.conf ExecReload=/bin/kill -s HUP $MAINPID ExecStop=/bin/kill -s TERM $MAINPID [Install] WantedBy=multi-user.target
启动并启用Nginx服务:
sudo systemctl start nginx.service && 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
将
vim
的Nginx配置的语法高亮显示为~/.vim/
,编辑Nginx配置文件时,你将获得很好的语法突出显示:mkdir ~/.vim/ cp -r ~/nginx-1.13.2/contrib/vim/* ~/.vim/
从
/etc/nginx/
中删除所有.default
备份文件:sudo rm /etc/nginx/*.default
结束语
就是这样了,现在已经安装了最新版本的Nginx。