第一章 安装nginx
1.1 nginx
1.1.1 nginx简介

  1. nginx是一款高性能的http和反向代理服务器
    1.1.2 nginx优点
  2. IO多路复用(epoll): 采用异步非阻塞的驱动模型, 无需为每个连接创建独立的线程, 并能高效处理高并发的业务场景
    1.1.3 yum安装nginx
  3. https://nginx.org/en/linux_packages.html#RHEL: 访问nginx安装手册
  4. yum install yum-utils: 安装yum扩展源
  5. 修改yum仓库, 下载稳定版本nginx
    vim /etc/yum.repos.d/nginx.repo
    [nginx-stable] //稳定版
    name=nginx stable repo
    baseurl=https://nginx.org/packages/centos/releasever/releasever/releasever/basearch/
    gpgcheck=1
    enabled=1
    gpgkey=https://nginx.org/keys/nginx_signing.key
    module_hotfixes=true

[nginx-mainline] //开发版
name=nginx mainline repo
baseurl=https://nginx.org/packages/mainline/centos/releasever/releasever/releasever/basearch/
gpgcheck=1
enabled=0
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true
4. yum -y install nginx: 安装nginx
5. 启动nginx, 配置开机自启, 并测试
systemctl start nginx
systemctl enable nginx
http://192.168.255.132:80
第二章 nginx常用配置文件

  1. rpm -ql nginx: 查看nginx所有安装目录
  2. /etc/logrotate.d/nginx: nginx的日志轮转目录
  3. /etc/nginx/nginx.conf: nginx主配置文件
  4. /etc/nginx/conf.d: nginx子配置目录
  5. /etc/nginx/conf.d/default.conf:nginx默认网站配置文件
  6. /etc/nginx/mime.types: ngixn的文件关联程序
  7. /etc/nginx/modules: nginx模块目录
  8. /var/log/nginx/access.log: nginx服务访问日志
  9. /var/log/nginx/error.log: nginx的错误日志
  10. /usr/lib/systemd/system/nginx.servirce.systemctl: nginx服务脚本
  11. /usr/sbin/nginx: nginx的主程序
    第三章 nginx编译参数
  12. nginx -V: 查看nginx所有编译参数
    第四章 nginx的基本配置
    4.1 配置文件组成
    4.1.1 主配置文件
  13. 核心模块: 管理进程数
  14. 事件驱动模块: 管理进程网络连接数
  15. http内核模块-http: 配置代理, 缓存, 日志
    4.1.2 子配置文件
  16. 网站服务模块-server: 配置网站服务
  17. local模块: 配置各种请求路径, 应对不同网站响应
    4.1.3 网站服务模块组成
  18. listen 80: 指定网站资源端口
  19. server_name: 指定网站资源域名
    4.1.4 local模块组成
  20. root /网站资源路径: 指定域名访问的资源路径
  21. index index.html: 指定网站资源首页
    第五章 nginx的日志
    5.1 日志配置
    5.1.1 日志格式
    vim /etc/nginx/nginx.conf
    http{
    log_format 日志名 日志变量;
    access_log /var/log/nginx/access.log 日志名;
    }
    5.1.2 日志变量
  22. $remote_addr: 客户机ip
  23. $remote_user: 访问用户
  24. $request: 请求信息
  25. $status: 响应信息
  26. $body_bytes_sent: 响应的字节数
  27. $http_referer: 记录来源链接
  28. $http_user_agent: 客户机浏览器信息
  29. $http_x_forwarded_for: 代理ip
    5.1.3 日志缓存
  30. 作用: 解决记录每一条日志都需要打开日志文件,之后在关闭日志文件, 会占用系统IO
  31. 配置:
    server{
    open_log_file_cache max=1000 inactive=20s min_uses=3 valid=1m
    }: 缓存最多1000, 当到达日志IO的极限, 开始清除20秒内小于三次的日志IO,
    注意:
  32. log_format: 指定日志格式
  33. access_log: 指定访问日志存放路径
  34. error_log: 指定错误日志存放路径
  35. open_log_file_cache: 开启日志缓存
  36. 日志缓存默认是关闭的
  37. 日志缓存并不建议开启, 因为开启后会占用内存
    5.2 日志分析
    1.统计2017年9月5日PV量
    2.统计2017年9月5日一天内访问最多的10个IP(iptop10)
    3.统计2017年9月5日访问大于100次的IP
    4.统计2017年9月5日访问最多的10个页面(requesttop10)5.统计2017年9月5日每个URL访问内容总大(request top10) 5.统计2017年9月5日每个URL访问内容总大(requesttop10)5.统计201795日每个URL访问内容总大(body_bytes_senbt)
    6.统计2017年9月5日每个IP访问状态码数量(status)7.统计2017年9月5日每个IP访问状态码为404及出现次数(status) 7.统计2017年9月5日每个IP访问状态码为404及出现次数(status)7.统计201795日每个IP访问状态码为404及出现次数(status)
    8.统计前一分钟的PV量
    9.统计2017年9月5日8:30-9:00,每个IP,出现404状态码的数量
    10.统计2017年9月5日各种状态码数量
    第六章 nginx的web模块
    6.1 连接状态
    6.1.1 作用
  38. 展示用户连接nginx服务的信息
    6.1.2 配置
  39. nginx -V 2>&1 | grep stub_status_module: 查询是否安装
  40. 配置连接状态
    vim /etc/nginx/conf.d/crb.conf
    server{
    location /nginx_status {
    stub_status;
    }
    }
  41. http://crb.com/名称: 查看连接用户连接信息’’
  42. active connections: 反应当前服务的活跃连接数
  43. server accepts handled requests: 总连接数, 成功连接数, http请求数量
    注意:
  44. 在server中设置keepalive_timeout 60: 表示长连接超时时间
  45. 长连接超时时间用于设置一次tcp连接的超时时间
    6.2 随机主页
    6.2.1 作用
  46. 将服务主页设置为随机页面, 用于提高用户粘性
    6.2.2 配置
  47. 在/crb/app目录创建多个html首页
  48. 配置随机主页
    vim /etc/nginx/conf.d/crb.conf
    location / {
    #root /crb
    #index index.html
    root /app //随机主页的资源目录
    random_index on; //开启随机主页
    }
    注意:
  49. 随机主页不能设置为隐藏文件
    6.3 替换模块
    6.3.1 作用
  50. 用于网页页面中字符出错, 做临时替换
    6.3.2 配置
  51. 配置替换模块
    vim /etc/nginx/conf.d/crb.conf
    server{
    sub_filter nginx ‘test’; //将所有nginx替换为test
    }
    6.4 文件读取
    6.4.1 作用
  52. 跳过用户空间的文件数据拷贝, 提高文件的传输效率
    注意:
  53. 文件读取三个参数: sendfile, tcp_nopush(), tcp_nodelay
  54. tcp_nopush: 默认禁用, 开启后数据包会积累到一定后发送, 避免资源浪费
  55. tcp_nodelay: 默认禁用, 开启tcp_nopush需要开启该参数, 避免ack包因延迟的重传, 也就是遇到ack包立即传输
    6.4.2 配置
  56. 配置文件模块
    vim /etc/nginx/conf.d/crb.conf
    server {
    sendfile on;
    tcp_nopush on;
    tcp_nodelay on;
    }
    6.5 文件压缩
    6.5.1 作用
  57. 文件在传输前对文件进行压缩, 提高传输效率
    6.5.2 配置
  58. vim /etc/nginx/conf.d/crb.conf
    server {
    gzip on; //开启文件压缩
    gzip_http_version 1.1; //版本
    gzip_comp_level 2; //压缩等级1~9
    gzip_type text/plain application/javascript application/x-javascript text/CSS application/xml text/javascript application/x-httpd-php image/jpegimage/gif image/png; //指定压缩文件类型
    gzip_static on; //静态压缩
    }
    6.6 页面缓存
    6.6.1 作用
  59. 使用缓存机制, 减少请求nginx服务的次数, 减轻服务的压力
    6.6.2 配置
  60. 配置页面缓存
    vim /etc/nginx/conf.d/crb.conf
    server {
    expire 12h; //指定缓存过期时间
    }
    6.7 防盗链
    6.7.1 作用
  61. 防止服务网站的连接被盗用, 导致nginx服务器资源的浪费
    6.7.2 配置
  62. vim /etc/nginx/conf.d/crb.conf
    #匹配所有gif/jpg/png/bmp格式的图片文件(不区分大小写)
    location ~*.(gif|jpg|png|bmp)$ {
    root /a.com;

定义合法的referer来源(只有这些来源的请求才被允许)

valid_referers
none # 允许无referer的请求(如直接浏览器输入图片URL)
blocked # 允许referer被防火墙/代理屏蔽的请求
*.qfcloud.top # 允许qfcloud.top的所有子域名
server_names # 允许当前服务器域名作为referer
-tianyun # 排除referer包含"tianyun"的请求(-表示排除)
~.google.com # 允许google.com域名(~表示正则匹配,.转义点号)
~.baidu.com; # 允许baidu.com域名(结尾必须加分号)

如果referer不合法($invalid_referer为true)

if ($invalid_referer) {
return 403;
}
}
第七章 nginx访问限制
7.1 请求限制
7.1.1 作用

  1. 限制单用户的请求频率
    7.1.2 配置
  2. 配置请求访问限制
    vim /etc/nginx/nginx.conf
    http {
    limit_req_zone $binary_remote_addr zone=req_zone_crb:10m rate=1r/s; //每秒内仅允许一次http请求, 并将ip以二进制形式记录, 并且创建10mb内存空间, 存放ip, 错误日志也会存放
    }
  3. 引用请求访问限制
    vim /etc/nginx/conf.d/crb.conf
    server{
    location / {
    limit_req zone=req_zone_crb;
    }
    }
  4. 压力测试
    yum -y install httpd-tools
    ab -n 1000 -c 100 http://crb.com/
    7.2 连接限制
    7.2.1 作用
  5. 限制单用户与服务器的并发连接数
    7.2.2 配置
  6. 配置连接访问限制
    vim /etc/nginx/nginx.conf
    http {
    limit_conn_zone $binary_remote_addr zone=conn_zone_crb:10m //定义连接限制, 并将ip以二进制形式记录, 并且创建10mb内存空间, 存放ip, 错误日志也会存放
    }
  7. 引用请求访问限制
    vim /etc/nginx/conf.d/crb.conf
    server{
    location / {
    limit_conn conn_zone_crb 5; //单用户并发连接数不能超过5
    }
    }
    第八章 nginx访问控制
    8.1 ip访问控制
    8.1.1 作用
  8. 禁止某ip对网站的访问
    8.1.2 配置
  9. vim /etc/nginx/conf.d/nginx.conf
    server{ //禁止12与130的访问, 其他人都可以
    allow all;
    deny 192.168.255.12;
    deny 192.168.255.130;iop
    }
    8.2 用户访问控制
    8.2.1 作用
  10. 使用用户名与密码形式, 控制网站的访问
    8.2.2 配置
  11. 安装httpd-tools, 并创建用户
    yum -y install httpd
    htpasswd -cm /etc/nginx/conf.d/user user01: 创建用户文件并创建user01
    htpasswd -m /etc/nginx/conf.d/user user02: 创建用户user02
  12. 引用用户配置
    vim /etc/nginx/conf.d/crb.conf
    server {
    auth_basic “用户访问控制”
    auth_basic_user_file /etc/nginx/conf.d/user
    }
    注意:
    200: 表示成功
    204: 表示成功, 单响应信息没有body
    301: 表示资源永久性重定向, 请求资源已经不在
    302: 表示资源临时性重定向, 请求资源还在
    400: 请求报文存在语法错误
    403: 请求资源被拒绝访问
    404: 服务器上无法找到请求的资源
    500: 表示服务器在执行请求时存在错误
    502: 当前代理服务器正常, 访问后端服务器出错
    503: 服务器处于维护状态
    第九章 nginx代理服务
    9.1 代理原理
    9.1.1 正向代理
  13. 内网客户机通过代理服务访问互联网
    9.1.2 反向代理
  14. 外网客户机通过通过代理服务访问内网服务器
    注意:
  15. 正向代理服务对象是客户机, 反向代理服务对象是服务器
  16. 正向代理隐藏客户机, 反向代理隐藏服务器
  17. 正向代理部署靠近客户端, 反向代理部署靠近服务器
    9.2 代理服务
    9.2.1 作用
  18. 隐藏后端web资源架构, 避免遭受直接攻击, 同时通过缓存静态资源,减少后端web服务的压力
    9.2.3 配置代理服务
    9.2.3.1 关闭root, index, expire
  19. 在网站对应配置文件中, 关闭root, index, expire
    vim /etc/nginx/conf.d/crb.conf
    location / {

root

index

expire

}
9.2.3.2 配置web代理集群

  1. 在网站对应的配置文件中, 配置集群
    vim /etc/nginx/conf.d/crb.conf
    upstream web集群名称 {
    server 192.168.255.129:80 weight=3; //权重3, 接收3倍请求
    server 192.168.255.130:80 weight=1;
    server 192.168.255.131:80 backup; //备用节点, 主节点故启用
    server 192.168.255.132:80 down; //标记下线节点
    max_fails 3; //3次请求失败, 判定节点故障
    fail_timeout 60s; //失败后60秒内, 故障节点不在接收请求
    }
    注意:
  2. upstream不用放在server{}中, 可以单独定义或放在http{}中定义
  3. upstream的名称后面代理需要引用
  4. 单节点不用配置upstream
    9.2.3.3 配置代理服务服务的转发
  5. 在网站对应的配置文件中, 配代理转发
    vim /etc/nginx/conf.d/crb.conf
    location / {
    proxy_pass http://web集群名称; //将用户请求转发到后端集群, 若后端web为单节点, 直接配置ip:port即可
    proxy_redirect default; //自动修正域名, 将web服务ip, 替换为web服务域名
    }
    9.2.3.4 配置请求头传递
  6. 在网站对应的配置文件中, 配置请求传递
    vim /etc/nginx/conf.d/crb.conf
    location / {
    proxy_set_header Host $http_host; //把客户端访问的url传递给后端
    proxy_set_header X-Real-IP $remote_addr; //把客户端的真实ip写入X-Real-IP头
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; //记录整个访问链路
    }
    9.2.3.5 配置超时控制
  7. 在网站对应的配置文件中, 配置超时控制
    vim /etc/nginx/conf.d/crb.conf
    location / {
    proxy_connect_timeout 30; //nginx与后端web服务器建立TCP连接的超时时间为30秒
    proxy_send_timeout 60; //nginx向后端发送请求的超时时间为60秒
    proxy_read_timeout 60; //nginx等待后端响应的超时时间为60秒
    }
    9.2.3.6 配置代理缓冲区
  8. 在网站对应的配置文件中, 配置代理缓冲区
    vim /etc/nginx/conf.d/crb.conf
    location / {
    proxy_buffering on; //开启代理缓冲区,ngixn先将响应数据全部收进缓冲区, 在分发给客户机
    proxy_buffer_size 32k; //web服务的响应缓冲区大小为2k
    proxy_buffers 4 128k; //设置响应体的换中区为4个, 每个大小为128k
    proxy_busy_buffers_size 256k; //缓冲区繁忙时的最大容量256k
    proxy_max_temp_file_size 256k; //响应数据超过缓冲区时, 临时文件的最大大小为256k; 若为0, 响应超缓冲区会直接发送给客户端
    }
    注意:
  9. 缓冲区的作用是, web服务器只需将资源发送给nginx代理, 之后释放与nginx代理的连接, web服务器不用再等待旺火环境差的用户的接收
  10. 配置代理后, web服务的访问日志中的最后一个字段会显示请求经过的代理服务ip
    9.3 代理缓存
    9.3.1 代理缓存的形式
  11. 购买第三方cdn
  12. 配置本地缓存
    9.3.2 作用
  13. 将静态资源存放在代理服务器的缓存中, 减少web服务的压力, 提高响应效率
    9.3.2 代理缓存工作原理
  14. 将用户请求的url使用加密算法转换, 转换后的字符串作为缓存的一级目录, 对应的url资源保存在其中, 当用户发起请求时, 代理服务器接受请求, 之后将url加密, 将加密后的字符串, 与紫衫缓存的一级目录比对, 若相同, 则命中缓存
    注意:
  15. 代理缓存的url加密, 是方便判断混存是否命中, 规避url的长度, 同时具有唯一性
    9.3.3 配置代理缓存
  16. 创建缓存文件存放目录
    mkdir -p /nginx/cache
  17. 在nginx的代理服务器的主配置文件中, 配置代理缓存
    vim /etc/nginx/nginx.conf
    http {
    proxy_cache_path /nginx/cache levels=1:2 keys_zone=缓存名称:10m max_size=10g inactive=60m use_temp_path=off; //将缓存内容存放在/nginx/chche下的两层目录中, 并且在内存中创建10mb的内存共享区域, 来存储缓存加密的url与命中情况, 缓存的最大空间为10GB, 当缓存空间使用完后, 会删除使用频率最低的缓存, 设置缓存连续未命中的存活周期为60分钟, 禁用缓存备份
    }
  18. 打开代理服务器中网站对应的子配置文件, 引用缓存机制
    vim /etc/nginx/conf.d/crb.conf
    location / {
    proxy_cache 缓存名称; //引用缓存配置
    proxy_cache_valid 200 304 12h; //将http状态码为200和304的资源缓存12小时
    proxy_cache_valid any 10m; //其他状态码的响应, 缓存10分钟
    proxy_cache_key hosthosthosturiisargsis_argsisargsargs; //对缓存的url进行化哈希化, 方便比对是否命中缓存
    add_header Nginx-Cache “$upstream_cache_status”; //将缓存是否命中, 体现在http的响应头中
    proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504; //出现500, 502等错误, 访问其他web服务器
    }
    第十章nginx的location与url重写
    10.1 location
  19. =: 表示精确匹配,优先级也是最高的
  20. ~: 区分大小写的正则匹配
  21. ~*: 不区分大小写的正则匹配
  22. / : 通用匹配,任何请求都会匹配到
  23. ^~: 以某些字符串开头
  24. !~: 非(区分大小写匹配的正则)
  25. !~*: 非(不区分大小写匹配的正则)
    注意:
  26. location的优先级: 精确匹配 > 字符开头 > 正则匹配 > 通配
    10.2 url重写
    10.2.1 概念
  27. 将用户请求的原路径, 进行重新定位
    10.2.2 重定向条件判断
  28. ~*: 正则匹配 (不区分大小写)
  29. !~: 非正则匹配 (区分大小写)
  30. !~*: 非正则 匹配 (不区分大小写)
  31. -f 和!-f: 用来判断是否存在文件
  32. -d 和!-d: 用来判断是否存在目录
  33. -e 和!-e: 用来判断是否存在文件或目录
  34. -x 和!-x: 用来判断文件是否可执行
    10.2.3 变量
  35. $document_root: 针对当前请求的根路径设置
  36. $remote_addr: 客户端地址
  37. $request_filename: 当前请求的文件路径名(带网站的主目录/usr/local/nginx/html/images/a.jpg)
  38. $request_uri: 当前请求的文件路径名(不带网站的主目录/images/a.jpg)
  39. $scheme: 用的协议,比如http或者是https
  40. $server_nam: 请求到达的服务器名;
  41. $arg:请求中的参数;
  42. $host: 请求信息中的"Host",如果请求中没有Host行,则等于设置的服务器名;
  43. $limit_rate: 对连接速率的限制;
  44. $request_method: 请求的方法,比如"GET"、"POST"等;
  45. $remote_port: 客户端端口号;
  46. $remote_user: 客户端用户名,认证用;
  47. $query_string: 与args相同;
  48. $server_protocol: 请求的协议版本,“HTTP/1.0"或"HTTP/1.1”;
  49. $server_addr: 服务器地址,如果没有用listen指明服务器地址,使用这个变量将发起一次系统调用以取得地址(造成资源浪费);
  50. documenturi:与document_uri: 与documenturi:uri一样,URI地址;
  51. $server_port: 请求到达的服务器端口号;
    10.2.4 重写标志
  52. last: 停止处理当前ngx_http_rewrite_module,从指令之后的一个新的位置改变URI匹配搜索;
  53. break: 本条规则匹配完成后,终止匹配,不再匹配后面的规则
  54. redirect: 返回302临时重定向,浏览器地址会显示跳转后的URL地址
  55. redirect url permanent: 返回301永久重定向,浏览器地址会显示跳转后URL地址
    第十一章 LNMP
    11.1 LNMP工作原理
  56. nginx代理接收用户请求, 若访问静态资源, nginx代理通过访问web服务或缓存, 将资源返回给用户; 若访问动态资源, nginx使用fastcgi, 调用php的fmp模块, 将请求交给php, 之后php调用mysql模块, 访问数据库, 之后将数据层层返回
    注意:
  57. nginx只能处理静态资源的
  58. fastcgi是nginx的动态请求接口, 通过fastcgi连接php-fpm, 实现将请求交给php
    11.2 linux的部署
  59. 配置yum
  60. 关闭selinux
  61. 关闭firewalld
  62. 配置ip
    11.3 nginx的部署
  63. 安装并启动nginx
    yum -y install nginx
    systemctl start nginx
    systemctl enable nginx
  64. 测试nginx的访问
    http://192.168.255.130
    11.4 php的部署
  65. 安装php
    yum -y install php -php-mysqlnd gd php-gd
  66. 配置php测试页面
    vim /usr/share/nginx/html/index.php
<?php phpinfo(); ?>
  1. 配置nginx服务
    vim /etc/nginx/conf/default.conf
    location / {
    index index.php
    }
  2. 重启并测试php的访问
    systemctl restart nginx
    http://192.168.255.130
    11.5 mysql的部署
  3. 安装并启动mysql
    yum -y install mariadb-server mariadb
    systemctl start mariadb
    systemctl enable mariadb
  4. 配置用户
    mysqladmin -u root password ‘66666’
    mysql -u root -p’666666’
    create database test;
    create user ‘zs’@‘192.168.255.130’ identified by ‘666666’;
    grant all on test.* to ‘zs’@‘192.168.255.130’;
    flush privileges;
    11.6 配置nginx的fsatcgi
    vim /etc/nginx/conf.d/default.conf
    location = /php_status { //php监控
    fastcgi_pass php-fpm主机ip:9000;
    fastcgi_param SCRIPT_FILENAME KaTeX parse error: Expected 'EOF', got '}' at position 46: …astcgi_params; }̲ location ~ \.p… { //梳理php请求
    fastcgi_pass php-fpm主机ip:9000;
    fastcgi_param SCRIPT_FILENAME documentrootdocument_rootdocumentrootfastcgi_script_name;
    include fastcgi_params;
    }
    11.7 配置php的php-fpm
  5. 配置phg
    vim /etc/php-fpm.d/www.conf
    pm = dynamic //启用动态管理模式
    pm.start_servers = 32 //最开始启动php-fpm进程32个
    pm.max_children = 512 //最大的php-fpm进程512个
    pm.min_spare_servers = 32 //最小空闲的php-fpm进程数32个
    pm.max_spare_servers=64 //最大空闲的php-fpm进程数64个, 避免大量请求关闭后, 空闲数量太多
    pm.max_requests = 1500 //每个php-fpm进程处理的请求数, 超过重启该进程, 默认值为1024
    user = nginx ; PHP-FPM 运行用户(必须和 Nginx 运行用户一致)
    listen.allowed_clients=nginx服务ip //允许接收fsatcgi的ip
    listen = 127.0.0.1:9000 //在php-fpm服务的9000端口监听, 来自nginx服务的请求

pm.status_path = /php_status //对应开启php程序监控
2. 重启php-fpm与nginx
systemctl restart php-fpm
netstat anpt | grep php-fpm
systemctl restart nginx
3. 测试
http://nginx的ip
注意:

  1. nginx的http{}影响范围是整个服务器
  2. nginx的server{}影响范围是一个网站服务
  3. nginx的location{}影响范围是网站服务中得到页面
  4. http服务占用80端口, https服务占用443端口
  5. https使用ssl的公钥与私钥实现对网站进行加密, 公钥进行加密, 私钥进行解密.
Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐