目录
一.概述
1.nginx特点
-
高并发、高性能;
-
模块化架构使得它的扩展性非常好
-
异步非阻塞的事件驱动模型(epoll)这点和 Node.js 相似
-
相对于其它服务器来说它可以连续几个月甚至更长而不需要重启服务器使得它具有高可靠性;
-
热部署、平滑升级;
-
完全开源,生态繁荣。
2.nginx作用
-
http服务器。Nginx可以独立提供http服务。可做网页静态服务器。
-
虚拟主机。可以实现在一台服务器虚拟出多个虚拟服务器。
-
反向代理,负载均衡。当网站的访问量达到一定程度后,单台服务器不能满足用户的请求时,需要用多台服务器集群可以使用nginx做反向代理。并且多台服务器可以平均分担负载,不会应为某台服务器负载高宕机而某台服务器闲置的情况。
-
nginx 中也可以配置安全管理、比如可以使用Nginx搭建API接口网关,对每个接口服务进行拦截。
二.nginx服务搭建
1.nginx安装
-
yum安装
-
编译安装
2.目录结构
-
yum安装
配置文件目录:/etc/nginx/ 临时数据文件目录:/var/lib/nginx 日志文件目录:/var/log/nginx/ 访问页面根目录:/usr/share/nginx/html/ 自定义配置文件目录:/etc/nginx/conf.d 默认配置文件目录:/etc/nginx/default.d
-
编译安装
配置文件目录:/usr/local/nginx1.8/conf 自定义配置文件目录:/usr/local/nginx1.8/conf/conf.d 默认配置文件目录:/usr/local/nginx1.8/conf/default.d 访问页面根目录: /usr/local/nginx1.8/html 日志文件目录:/usr/local/nginx1.8/logs 命令存放目录:/usr/local/nginx1.8/sbin
3.核心配置文件
配置文件名称 | 配置文件作用 |
---|---|
fastcgi.conf | 此文件包含了FastCGI相关的配置,用于与FastCGI进程通信 |
fastcgi.conf.default | 此文件是fastcgi.conf的备份副本 |
fastcgi_params | 此文件包含了用于FastCGI的参数配置,包括fastcgi的传输协议、请求超时时间等 |
fastcgi_params.default | 此文件是fastcgi_params的备份副本 |
koi-utf | 此文件包含了UTF-8编码与KOI8-R编码之间的字符转换规则,用于处理中文文件名等问题 |
koi-win | 此文件包含了Windows系统的字符转换规则,用于处理Windows系统的文件名问题 |
mime.types | 此文件包含了Nginx支持的MIME类型配置,用于设置相应的Content-Type头 |
mime.types.default | 此文件是mime.types的备份副本 |
nginx.conf | Nginx的主要配置文件,其中包含了所有全局配置和访问控制规则,作为Nginx服务器的入口文件 |
nginx.conf.default | 此文件是nginx.conf的备份副本 |
scgi_params | 此文件包含了用于SCGI协议的参数配置 |
scgi_params.default | 此文件是scgi_params的备份副本 |
uwsgi_params | 此文件包含了用于uWSGI协议的参数配置 |
uwsgi_params.default | 此文件是uwsgi_params的备份副本 |
win-utf | 此文件包含了Windows系统的字符转换规则,用于处理Windows系统的文件名问题 |
4.核心命令
命令 | 作用 |
---|---|
systemctl enable nginx | 开机自动启动 |
systemctl disable nginx | 关闭开机自动启动 |
systemctl start nginx | 启动Nginx |
systemctl stop nginx | 停止Nginx |
systemctl restart nginx | 重启Nginx |
systemctl reload nginx | 重新加载Nginx |
systemctl status nginx | 查看 Nginx 运行状态 |
ps -elf | grep [n]ginx | 查看Nginx进程,但是不会显示grep本身的进程 |
kill -9 pid | 根据上面查看到的Nginx进程号,杀死Nginx进程,-9 表示强制结束进程 |
nginx -s reload | 向主进程发送信号,重新加载配置文件,热重启 |
nginx -s reopen | 重启 Nginx |
nginx -s stop | 快速关闭 |
nginx -s quit | 等待工作进程处理完成后关闭 |
nginx -T | 查看当前 Nginx 最终的配置 |
nginx -t | 检查配置是否有问题 |
nginx -c configfilePath | 指定配置文件启动nginx |
5.nginx信号
信号名 | 含义 |
---|---|
stop | 直接停止 |
quit | 优雅的退出:有人在访问不会结束进程 |
reopen | 分割日志 |
reload | 重新加载配置文件 |
term | 快速停止nginx进程,可能会中断现有连接,与stop信号类似。 |
usr1 | 重新打开日志文件,用于日志切割或日志重定向,与reopen信号类似。 |
usr2 | 平滑地升级nginx可执行文件。 |
hup | 重新加载配置文件,优雅地应用新配置,与reload信号类似。 |
winch | 当nginx以master/worker工作模式运行时,重新生成worker进程以适应新的配置。 |
usr3 | 向worker进程发送自定义信号。 |
三.配置案例
1.单站点配置
2.虚拟机主机头配置
四.HTTPS访问配置
1.ssl简介
SSL (Secure Sockets Layer)安全套接层。是由Netscape(网景)公司于1990年开发,用于保障Word Wide Web(WWW)通讯的安全。**主要任务是提供私密性,信息完整性和身份认证。**
TLS(Transport Layer Security)安全传输层协议,)用于在两个通信应用程序之间提供保密性和数据完整性。该标准协议是由IETF于1999年颁布,整体来说TLS非常类似SSLv3,只是对SSLv3做了些增加和修改。
2.ssl协议介绍
SSL是一个不依赖于平台和应用程序的协议,位于TCP/IP协议与各种应用层协议之间,为数据通信提高安全支持
3.传输过程
-
首先发送数字证书,获取到可信的public key。
-
通过public key发送对称秘钥,接收方用私钥解密
-
通信双方使用仅仅对方可知的对称秘钥进行加密传输
4.openssl介绍
OpenSSL是一个实现安全套接字层的加密工具包,openssl程序是一个命令行工具,用于使用OpenSSL加密库的加密函数
-
创建和管理私钥、公钥和参数
-
公钥密码操作
-
创建X.509证书、CSR和CRT
-
消息摘要的计算
-
密码加密和解密
-
SSL/TLS客户端和服务器测试
-
处理S/MIME签名或加密邮件
-
时间戳请求、生成和验证
5.HTTPS工作流程
-
客户端(浏览器)访问 https://www.baidu.com 百度网站;
-
百度服务器返回 HTTPS 使用的 CA 证书;
-
浏览器验证 CA 证书是否为合法证书;
-
验证通过,证书合法,生成一串随机数并使用公钥(证书中提供的)进行加密;
-
发送公钥加密后的随机数给百度服务器;
-
百度服务器拿到密文,通过私钥进行解密,获取到随机数(公钥加密,私钥解密,反之也可以);
-
百度服务器把要发送给浏览器的内容,使用随机数进行加密后传输给浏览器;(对称加密)
-
此时浏览器可以使用随机数进行解密,获取到服务器的真实传输内容。
7.nginx配置ssl
五.loocation配置
1.作用
配置路径;写在server字段中
2.匹配规则
-
= 精确匹配;
-
~ 正则匹配,区分大小写;
-
~* 正则匹配,不区分大小写;
-
^~ 匹配到即停止搜索;
3.匹配优先级
( = ) > (^~) > (~) > (~*) > (不带任何字符 “/”)。
六.rewrite配置
1.语法
rewirte /images/(.*\.jpg)$ /pic/$1; # $1是前面括号(.*\.jpg)的反向引用
2.可写入字段
server、location、if
3.if指令
4.autoindex
5.nginx配置中的常用变量
变量名 | 含义 |
---|---|
remote_add | 客户端IP地址 |
remote_port | 客户端端口 |
server_addr | 服务端IP地址 |
Server_port | 服务端端口 |
server_protocol | 服务端协议 |
binary_remote_addr | 二进制格式的客户端IP地址 |
connection | TCP连接的序号,递增 |
connection_request | TCP连接当前的请求数量 |
uri | 请求的URL,不包含参数 |
request ur | 请求的URL,包含参数 |
scheme | 协议名,http或https |
request metho | 请求方法 |
request_length | 全部请求的长度,包含请求行、请求头、请求体 |
args | 全部参数字符串 |
arg_参数名 | 获取特定参数值 |
is_args | URL中是否有参数,有的话返回?,否则返回空 |
query_string | 与args相同 |
host | 请求信息中的Host,如果请求中没有Host行,则在请求头中找,最后 使用nginx中设置的server_name。 |
http_user_agent | 用户访问方式 |
http_referer | 从哪些链接过来的请求 |
http_via | 每经过一层代理服务器,都会添加相应的信息 |
http_cookie | 获取用户cookie |
request time | 处理请求已消耗的时间 |
https | 是否开启了https,是则返回on,否则返回空 |
request_filename | 磁盘文件系统待访问文件的完整路径 |
document_root | 由URI和root/alias规则生成的文件夹路径 |
limit_rate | 返回响应时的速度上限值 |
七.配置nginx状态统计
1.下载vts模块
https://github.com/vozlt/nginx-module-vts
2.编译nginx
tar xf nginx-module-vts-master.zip cd nginx-1.22.1/ ./configure --prefix=/usr/local/nginx/ --add-module=/root/nginx-module-vts-master && make && make install