如何在CentOS6.4x64VPS上从源代码编译Nginx
状态:已弃用
本文介绍了不再受支持的 CentOS 版本。 如果您目前正在运行运行 CentOS 6 的服务器,我们强烈建议您升级或迁移到受支持的 CentOS 版本。
原因:CentOS 6 已于 2020 年 11 月 30 日结束生命周期 (EOL) ,不再接收安全补丁或更新。 因此,不再维护本指南。
请参阅:本指南可能仍可用作参考,但可能不适用于其他 CentOS 版本。 如果可用,我们强烈建议使用为您正在使用的 CentOS 版本编写的指南。
介绍
nginx 发音为“engine x”,是一个 HTTP 和反向代理服务器,也是一个邮件代理服务器。
nginx
是一个开源 Web 服务器,它使用 epoll 机制为客户端提供服务,而 Apache 则使用基于线程的模型将请求委托给线程池中的实例。 nginx
因为它的速度而被更多地使用而不是 Apache。 nginx
拥有超过 13% 的市场份额 并不断增加。
为什么要从源代码编译
从源代码编译在以下情况下很有用:
- 发布后立即升级到最新版本。
- 修复安全漏洞
- 修复影响您服务的已知错误
- 修改服务器名称等默认值
- 应用补丁修复已知错误
- 由于依赖层次结构,软件存储库未升级到最新版本
它很痛苦,因为:
- 您需要及时了解软件版本
- 您的服务器软件可能依赖于依赖关系树中的旧版本
模块和第 3 方模块
nginx 有许多 模块 在现有 VPS 之上添加功能。 一些著名的 3rd 方模块 是:
- SPDY 包含在 nginx 1.5.0 中(之前作为补丁提供)
- google pagespeed(source) 通过自动将网络性能最佳实践应用于页面和相关资产(CSS、JavaScript、图像)来加速您的网站并减少页面加载时间,而无需您进行修改您现有的内容或工作流程
- ModSecurity 是一个开源的 Web 应用防火墙,用于减少对应用服务器的已知攻击。 *TCP Proxy 允许 nginx 通过 tcp 服务器进行代理,而不是默认的套接字模式。
设置你的 VPS
创建一个新的 VPS 或选择一个现有的
用你的域名创建一个新的VPS。 我们将使用“example.com”作为域,或者您可以使用服务器 IP 而不是主机名。
设置从源代码编译的先决条件
安全登录您的 VPS
您可以使用您主机的密码登录 VPS。
ssh root@example.com
为 nginx 安装依赖项
我们需要安装一些先决条件来进行编译,其中包括开发库和源代码编译器。
yum -y install gcc gcc-c++ make zlib-devel pcre-devel openssl-devel
让我们首先创建一个目录来存储我们的源代码:
mkdir -p src && cd src
从源代码编译
下载源代码
让我们从 http://nginx.org/en/download.html 获取当前的 nginx 版本号
运行以下命令下载源代码。
nginxVersion="1.5.5" wget http://nginx.org/download/nginx-$nginxVersion.tar.gz tar -xzf nginx-$nginxVersion.tar.gz ln -sf nginx-$nginxVersion nginx
准备 nginx 源码
我们首先要准备 nginx
和必要的基本选项。
有关选项的完整列表,您可以查看 ./configure --help
基本文件路径名的选项
这些选项是我们覆盖的基本变量,以使用 /etc/
处的默认系统路径,以确保通过 rpm
安装时它的工作原理相似。 user
和 group
选项用于以非特权运行 nginx 工作进程。
--user --group --prefix --sbin-path --conf-path --pid-path --lock-path --error-log-path --http-log-path
其他选项
--with-http_gzip_static_module
选项使 nginx 能够使用gzip
(在将文件从磁盘提供给启用 gzip 的客户端之前,此模块将在同一位置查找以“.gz”结尾的预压缩文件. 目的是避免每次请求时都压缩同一个文件。)。[建议减少发送信息的大小]--with-http_stub_status_module
选项启用 nginx 上的其他插件以允许我们获取状态(此模块提供从 nginx 获取某些状态的能力。)。 [推荐获取统计数据]--with-http_ssl_module
- 如果要运行 HTTPS 服务器,则需要。 请参阅 如何在 nginx 上为 CentOS 6 创建 SSL 证书--with-pcre
选项可以在定义路由时通过 Regular Expression Matching 匹配路由。 [推荐,一旦你开始添加和匹配路由,你会发现它的更多用途]--with-file-aio
- 启用异步 I/O,优于默认发送文件选项 (如果您允许用户下载静态文件,推荐使用)--with-http_realip_module
用于在负载均衡器后面获取客户端的 IP。 当在 CloudFlare 之类的服务后面提供内容时,这很有用。--without-http_scgi_module
- 禁用 SCGI 模块(通常在运行 CGI 脚本时使用)--without-http_uwsgi_module
- 禁用 UWSGI 模块(通常在运行 CGI 脚本时使用)--without-http_fastcgi_module
- 禁用 FastCGI 模块(通常在运行 CGI 脚本时使用)
我们的配置选项
cd nginx ./configure \ --user=nginx \ --group=nginx \ --prefix=/etc/nginx \ --sbin-path=/usr/sbin/nginx \ --conf-path=/etc/nginx/nginx.conf \ --pid-path=/var/run/nginx.pid \ --lock-path=/var/run/nginx.lock \ --error-log-path=/var/log/nginx/error.log \ --http-log-path=/var/log/nginx/access.log \ --with-http_gzip_static_module \ --with-http_stub_status_module \ --with-http_ssl_module \ --with-pcre \ --with-file-aio \ --with-http_realip_module \ --without-http_scgi_module \ --without-http_uwsgi_module \ --without-http_fastcgi_module
编译nginx源码
一旦我们能够配置甚至检查附加要求的源代码,例如我们在 pre-requisites
步骤中安装的编译器(gcc,g++):
make make install
运行 VPS
将用户 nginx 添加到系统中。 这是一次性命令:
useradd -r nginx
我们需要设置文件
/etc/init.d/nginx
在系统启动时运行:#!/bin/sh # # nginx - this script starts and stops the nginx daemin # # chkconfig: - 85 15 # description: Nginx is an HTTP(S) server, HTTP(S) reverse \ # proxy and IMAP/POP3 proxy server # processname: nginx # config: /etc/nginx/nginx.conf # pidfile: /var/run/nginx.pid # user: nginx # Source function library. . /etc/rc.d/init.d/functions # Source networking configuration. . /etc/sysconfig/network # Check that networking is up. [ "$NETWORKING" = "no" ] && exit 0 nginx="/usr/sbin/nginx" prog=$(basename $nginx) NGINX_CONF_FILE="/etc/nginx/nginx.conf" lockfile=/var/run/nginx.lock start() { [ -x $nginx ] || exit 5 [ -f $NGINX_CONF_FILE ] || exit 6 echo -n $"Starting $prog: " daemon $nginx -c $NGINX_CONF_FILE retval=$? echo [ $retval -eq 0 ] && touch $lockfile return $retval } stop() { echo -n $"Stopping $prog: " killproc $prog -QUIT retval=$? echo [ $retval -eq 0 ] && rm -f $lockfile return $retval } restart() { configtest || return $? stop start } reload() { configtest || return $? echo -n $"Reloading $prog: " killproc $nginx -HUP RETVAL=$? echo } force_reload() { restart } configtest() { $nginx -t -c $NGINX_CONF_FILE } rh_status() { status $prog } rh_status_q() { rh_status >/dev/null 2>&1 } case "$1" in start) rh_status_q && exit 0 $1 ;; stop) rh_status_q || exit 0 $1 ;; restart|configtest) $1 ;; reload) rh_status_q || exit 7 $1 ;; force-reload) force_reload ;; status) rh_status ;; condrestart|try-restart) rh_status_q || exit 0 ;; *) echo $"Usage: $0 {start|stop|status|restart|condrestart|try-restart|reload|force-reload|configtest}" exit 2 esac
或者,您可以从以下位置获取源:
wget -O /etc/init.d/nginx https://gist.github.com/sairam/5892520/raw/b8195a71e944d46271c8a49f2717f70bcd04bf1a/etc-init.d-nginx
这个文件应该是可执行的,这样我们就可以通过'service nginx来使用它 ':
chmod +x /etc/init.d/nginx
将服务设置为在系统启动时启动:
chkconfig --add nginx chkconfig --level 345 nginx on
配置/etc/nginx/nginx.conf设置需要增加的
types_hash_bucket_size
和server_names_hash_bucket_size
。http { include mime.types; default_type application/octet-stream; # add the below 2 lines under http around line 20 types_hash_bucket_size 64; server_names_hash_bucket_size 128;
启动服务器。 这将在端口 80 上启动 VPS。
service nginx start
设置完成
在浏览器中访问 example.com 或您的 IP 地址。 你会看见:
Welcome to nginx!
恭喜! 您全新的 nginx 服务器已启动。
维护
修改nginx二进制文件时重启nginx服务器:service nginx restart
修改 nginx.conf 时重新加载 nginx:service nginx reload
配置 nginx Web 服务器
升级到最新版本
让我们从 http://nginx.org/en/download.html 获取当前的 nginx 版本
运行以下命令下载源代码。
ssh root@example.com cd ~/src/ nginxVersion="1.5.5" # set the value here from nginx website wget http://nginx.org/download/nginx-$nginxVersion.tar.gz tar -xzf nginx-$nginxVersion.tar.gz rm nginx # removes the soft link ln -sf nginx-$nginxVersion nginx cd nginx ./configure \ --user=nginx \ --group=nginx \ --prefix=/etc/nginx \ --sbin-path=/usr/sbin/nginx \ --conf-path=/etc/nginx/nginx.conf \ --pid-path=/var/run/nginx.pid \ --lock-path=/var/run/nginx.lock \ --error-log-path=/var/log/nginx/error.log \ --http-log-path=/var/log/nginx/access.log \ --with-http_gzip_static_module \ --with-http_stub_status_module \ --with-http_ssl_module \ --with-pcre \ --with-file-aio \ --with-http_realip_module \ --without-http_scgi_module \ --without-http_uwsgi_module \ --without-http_fastcgi_module make make install service nginx restart