编译安装及更新 Nginx 服务
一、编译安装 Nginx
1. 下载 Nginx 源码包
下载地址:https://nginx.org/download/
wget https://nginx.org/download/nginx-1.12.0.tar.gz
cd /etc/yum.repos.d
mv local.repo local.repo.bak
wget http://mirrors.aliyun.com/repo/Centos-7.repo
yum clean all && yum makecache
2. 解压 Nginx 源码包
[root@localhost opt]#
tar -xf nginx-1.12.0.tar.gz
3. 安装编译安装依赖包
依赖包 | 作用 |
---|---|
pcre-devel | CRE 是一个正则表达式库,该软件包包含了开发头文件和库文件 |
zlib-devel | Zlib 是一个压缩库,提供用于压缩和解压缩数据的函数,该软件包包含了开发头文件和库文件 |
gcc | GCC 是 GNU 编译器集合中的一个,它是 C 编译器、C++ 编译器和其他语言编译器的前端,可以将源代码编译为可执行文件 |
gcc-c++ | GCC 的 C++ 编译器前端,允许编译 C++ 代码 |
make | 一种自动化编译程序。它根据 Makefile 中的规则自动构建代码 |
[root@localhost opt]#
yum -y install \
pcre-devel \
zlib-devel \
gcc \
gcc-c++ \
make
4. 创建运行用户与组
[root@localhost ~]#
useradd -M -s /sbin/nologin nginx
5. 设置安装的路径及模块
模块 | 作用 |
---|---|
--prefix | 安装目录 |
--user | 运行nginx服务器的用户 |
--group | 运行nginx服务器的用户组 |
--with-http_stub_status_module | Nginx 内置模块之一,用于提供当前 Nginx 进程的状态信息和统计数据。它可以通过 HTTP 请求获取,方便监控和调试 |
[root@localhost nginx-1.12.0]#
./configure \
--prefix=/usr/local/nginx \
--user=nginx \
--group=nginx \
--with-http_stub_status_module
6. 编译与安装
[root@localhost nginx-1.12.0]#
make -j 4 && make install
7. 优化 Nginx 的命令
让系统识别nginx的操作命令
[root@localhost ~]#
ln /usr/local/nginx/sbin/nginx /usr/local/bin/
8. 检查 Nginx 配置文件是否配置正确
[root@localhost ~]#
nginx -t
二、Nginx 版本升级
1. 安装新版本 Nginx 依赖包
Nginx-1.22.0 版本的安装包比 1.12 版本的多了两个依赖包(openssl 和 openssl-devel )
yum -y install openssl openssl-devel
2. 设置安装路径及模块
[root@localhost nginx-1.22.0]#
./configure \
--prefix=/usr/local/nginx \
--user=nginx \
--group=nginx \
--with-http_stub_status_module \
--with-http_ssl_module
3. 编译新的 Nginx 软件包
[root@localhost nginx-1.22.0]#
make
4. 更新 Nginx 执行文件
(1)备份
mv /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx_old
(2)更新
cp /opt/objs/nginx /usr/local/nginx/sbin/nginx
5. 检查 Nginx 是否更新成功
查看 Nginx版本
nginx -v
三、添加 Nginx 系统服务
添加到 service 系统管理
[root@localhost ~]#
vim /etc/init.d/nginx
#!/bin/bash
#chkconfig: 35 99 20
#description:Nginx Server Control Script
COM="/usr/local/nginx/sbin/nginx"
PID="/usr/local/nginx/logs/nginx.pid"
case "$1" in
start)
$COM
;;
stop)
kill -s QUIT $(cat $PID)
;;
resart)
$0 stop
$0 start
;;
reload)
kill -s HUP $(cat $PID)
;;
*)
echo "Usage: $0 {start|stop|restart|reload}"
exit 1
esac
exit 0
chmod +x /etc/init.d/nginx
chkconfig --add nginx
systemctl stop nginx
systemctl start nginx
三、nginx 主配置文件
nginx 的主配置文件为:/usr/local/nginx/conf/nginx.conf
1. 全局配置
vim /usr/local/nginx/conf/nginx.conf
2. I/O 配置
如提高每个进程的连接数还需执行“ulimit -n 65535”命令临时修改本地每个进程可以同时打开的最大文件数。
在Linux平台上,在进行高并发TCP连接处理时,最高的并发数量都要受到系统对用户单一进程同时可打开文件数量的限制(这是因为系统为每个TCP连接都要创建一个socket句柄,每个socket句柄同时也是一个文件句柄)。
可使用ulimit -a命令查看系统允许当前用户进程打开的文件数限制。
/etc/security/limits.conf
epoll是Linux内核为处理大批句柄而作改进的poll,是Linux下多路复用IO接口select/poll的增强版本,它能显著的减少程序在大量并发连接中只有少量活跃的情况下的系统CPU利用率。
若工作进程数为 8,每个进程处理 4 096 个连接,则允许 Nginx 正常提供服务的连接数
已超过 3 万个(4 096×8=32 768),当然具体还要看服务器硬件、网络带宽等物理条件的性
能表现。
3. HTTP 配置
使用“http { }”界定标记,包括访问日志、HTTP 端口、网页目录、默认字符集、连接保
持,以及后面要讲到的虚拟 Web 主机、PHP 解析等一系列设置,其中大部分配置语句都包
含在子界定标记“server { }”内
http {
##文件扩展名与文件类型映射表
include mime.types;
##默认文件类型
default_type application/octet-stream;
##日志格式设定
#log_format main '$remote_addr - $remote_user [$time_local] "$request" '
# '$status $body_bytes_sent "$http_referer" '
# '"$http_user_agent" "$http_x_forwarded_for"';
##访问日志位置
#access_log logs/access.log main;
##支持文件发送(下载)
sendfile on;
##此选项允许或禁止使用socket的TCP_CORK的选项(发送数据包前先缓存数据),此选项仅在使用sendfile的时候使用
#tcp_nopush on;
##连接保持超时时间,单位是秒
#keepalive_timeout 0;
keepalive_timeout 65;
##gzip模块设置,设置是否开启gzip压缩输出
#gzip on;
##Web 服务的监听配置
server {
##监听地址及端口
listen 80;
##站点域名,可以有多个,用空格隔开
server_name www.kgc.com;
##网页的默认字符集
charset utf-8;
##根目录配置
location / {
##网站根目录的位置/usr/local/nginx/html
root html;
##默认首页文件名
index index.html index.php;
}
##内部错误的反馈页面
error_page 500 502 503 504 /50x.html;
##错误页面配置
location = /50x.html {
root html;
}
}
}
=========================================================================================
日志格式设定:
$remote_addr与$http_x_forwarded_for用以记录客户端的ip地址;
$remote_user:用来记录客户端用户名称;
$time_local: 用来记录访问时间与时区;
$request: 用来记录请求的url与http协议;
$status: 用来记录请求状态;成功是200,
$body_bytes_sent :记录发送给客户端文件主体内容大小;
$http_referer:用来记录从哪个页面链接访问过来的;
$http_user_agent:记录客户浏览器的相关信息;
通常web服务器放在反向代理的后面,这样就不能获取到客户的IP地址了,通过$remote_add拿到的IP地址是反向代理服务器的iP地址。反向代理服务器在转发请求的http头信息中,可以增加x_forwarded_for信息,用以记录原有客户端的IP地址和原来客户端的请求的服务器地址。
location常见配置指令,root、alias、proxy_pass
root(根路径配置):root /var/www/html
请求www.kgc.com/test/1.html,会返回文件/var/www/html/test/1.html
alias(别名配置):alias /var/www/html
请求www.kgc.com/test/1.html,会返回文件/var/www/html/1.html
proxy_pass(反向代理配置)
四、总结
升级软件时,需要在编译安装新软件之前将新软件所需要的编译依赖包安装好,否则会编译失败。