Nginx
概念
nginx(engine x)隐形X
属于高性能web反向代理服务器,同样也是高性能http服务器,同时还是IMAP/POP3/SMTP邮件服务器
功能丰富,且稳定,由C语言编写,距离操作系统较近,运行速度较快,消耗资源少,属于轻量级服务,支持高并发(50000)
与apache对比
1)nginx占用资源少,支持更多的并发连接,效率更高,如果一个成熟的nginx服务器,可以提供5W的并发连接响应
2)负载均衡服务器
nginx支持php,可以作为httpd代理服务器进行服务,用C语言编写,效率比apache要快
3)作为邮件代理服务器
nginx最早作为邮件服务器使用,性能高于apache
4)安装简单 在7*24小时高可用状态下,可以进行平滑升级(版本升级)
nginx在企业中的应用
最多用于反向代理和负载均衡服务器,还可以用作web服务器,还可以提供前端缓存服务(proxy_cache)
安装nginx
yum -y install pcre*
yum -y install openssl*
pcre工具:为了支持rewrite,实现url的重定向,根据正则表达式进行内容跳转,跳转到指定的目标
openssl:如果在数据进行传输的过程中没有加密认证,发送的数据很容易被抓包工具获取,容易暴露信息,openssl用于使用证书将传送的数据进行加密,保证数据安全,通常要去网站配置ssl证书,实现https协议。
tar zxf nginx-1.6.0.tar.gz -C /usr/src #解压nginx源码包
cd /usr/src/nginx-1.6.0/ #进入nginx的解压目录进行配置编译
./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_ssl_module --with-http_spdy_module --with-http_stub_status_module --with-pcre
#进行编译前的配置
make && make install #编译安装
useradd nginx #创建nginx程序用户nginx
ln -s /usr/local/nginx/sbin/nginx /usr/sbin #优化nginx命令的路径
nginx默认使用80端口(与apache冲突)
nginx的configure配置项释义
--prefix=/usr/local/nginx #指定nginx安装路径
--user=nginx #指定nginx程序用户
--group=nginx #指定nginx程序组用户
--with-http_ssl_module #支持https加密模块
--with-http_spdy_module #支持谷歌spdy(谷歌基于会话层的新协议,提高网速,减少网络延迟,加速网络传输,压缩请求头部)
--with-http_stub_status_module #支持nginx状态检查
--with-pcre #支持pcre重写功能(url重写)
修改nginx配置文件的基本配置
vim /usr/local/nginx/conf/nginx.conf
添加
#user nginx nginx; #指定运行程序的用户和组,这里的注释不需要去掉
nginx -t #nginx检测配置文件语法的命令,显示下图则没有问题,否则会报配置文件哪行出错
nginx #启动服务
此时就可以直接使用linux的浏览器访问本机ip
nginx配置文件释义
vim /usr/local/nginx/conf/nginx.conf
worker_processes 1; //开启nginx工作进程的数量(cpu核心数,几核可以写几)
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info; //错误日志路径
#pid logs/nginx.pid; //nginx进程号路径
events {
worker_connections 1024; //一个进程可以处理多少请求
}
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"'; //定义日志的信息
$remote_addr和$http_x_forwarded_for 记录客户端的ip地址
$remote_user 记录客户端用户名
$time_local 记录来访时间和时区
$request 记录请求的url和http协议
$status 记录请求状态(状态码)
$body_bytes_sent记录发送给客户端文件主体内容
$http_referer 记录从哪个页面链接进行跳转(访问到此服务器)
$http_user_agent记录客户端浏览器的信息
#access_log logs/access.log main;
sendfile on;
#tcp_nopush on;
#keepalive_timeout 0;
keepalive_timeout 65; //保持会话时间,单位s
#gzip on;
server { //
listen 80; //设置服务的监听端口
server_name localhost; //配置域名信息,一个server{}对应一个域名
#charset koi8-r; //字符集
#access_log logs/host.access.log main;
location / { //表示跳转,当前写的location后有/,表示如果在地址栏输入的网址为根目录的默认ip或者域名,直接将连接跳转到location中设置的页面上
root html; //设置网站根目录,默认当前目录/usr/local/nginx/html
index index.html index.htm; //配置索引文件
}
nginx常用命令
nginx:启动nginx服务
nginx -t :检测语法问题
nginx -s :停止nginx服务
nginx -s reload :重新加载nginx
Nginx平滑升级
可以在不间断服务器的前提下进行版本的升级,叫做平滑升级(热升级)
确保有更新版本的nginx服务器
确保有nginx旧版本
确保nginx正在运行
[root@localhost ~]# tar zxf nginx-1.14.2.tar.gz -C /usr/src //解压新版本
[root@localhost ~]# cd /usr/src/nginx-1.14.2/
[root@localhost nginx-1.14.2]# ./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_stub_status_module
[root@localhost nginx-1.14.2]# make //只需要make,不需要make install
[root@localhost nginx-1.14.2]# mv /usr/local/nginx/sbin/nginx /usr/local/sbin/nginx_old //将旧版本的nginx启动命令转移走
[root@localhost nginx-1.14.2]# cd objs/
[root@localhost objs]# cp nginx /usr/local/nginx/sbin/ //将新版本的nginx命令脚本移动到nginx的管理命令目录下
[root@localhost objs]# kill -USR2 `cat /usr/local/nginx/logs/nginx.pid` //杀死旧版本的进程号,运行新版本的进程号,旧的进程处理完当前的请求后,新版本接替旧版本
[root@localhost ~]# nginx -v //查看nginx版本,已经更新
编写nginx脚本的目的
将脚本放入/etc/init.d/下,可以将nginx服务添加到服务项中,使用systemctl进行管理
方便nginx的使用,将nginx进行更直观的操作,start|stop|restart
[root@localhost ~]# vim /etc/init.d/nginx //建立脚本文件
添加
#!/bin/bash
#chkconfig:- 99 20
#description:Nginx Service Control Script
PROG="/usr/local/nginx/sbin/nginx"
PIDF="/usr/local/nginx/logs/nginx.pid"
case "$1" in
start)
$PROG
;;
stop)
kill -s QUIT $(cat $PIDF)
;;
restart)
$0 stop
$0 start
;;
reload)
kill -s HUP $(cat $PIDF)
;;
*)
echo "Usage: $0 {start|stop|restart|reload}"
exit 1
esac
exit 0
将编写的脚本添加为系统服务,可以使用systemctl进行管理服务的启动,停止
[root@localhost ~]# chmod +x /etc/init.d/nginx //给予nginx脚本可执行权限
[root@localhost ~]# chkconfig --add nginx //将nginx添加为系统服务
现在就可以通过systemctl 进行管理nginx服务
[root@localhost ~]# systemctl start nginx //启动服务