nginx

117 阅读5分钟

反向代理 :客户端无感知,客户端不需要任何配置,只需将请求发送到反向代理服务器,由反向代理服务器选择目标服务器去获取数据 对外暴漏的是代理服务器 隐藏的是目标服务器

负载均衡 请求分发到不同的服务器上

动静分离

安装 下载地址:nginx.org/ nginx-1.12.2.tar.gz

yum install -y gcc gcc-c++

安装PCRE库 #下载 wget netix.dl.sourceforge.net/project/pcr…

#解压安装包: tar -zxvf pcre-8.40.tar.gz

#进入安装包目录 cd pcre-8.40

#编译安装
./configure make && make install

#查看pcre版本 pcre-config --version

启动命令 ./nginx 启动 ./nginx -v 版本 ./nginx -V 版本 以及安装的配置信息 ./nginx -s stop 暴力 ./nginx -s quit 优雅 ./nginx -s reload

反向代理

image.png

nginx 安装运行

官网 nginx.org

image.png

image.png

image.png

image.png

如何查找nginx whereis nginx

image.png

image.png

设置worker进程数量

image.png

image.png

work抢占机制 通过锁的方式 image.png

image.png 传统是采用的同步阻塞方式

image.png 异步非阻塞的通信模型,多路复用器,如果client阻塞了 work不会继续等待,会处理其他请求

一个work的链接数是可以配置的

image.png

nginx配置

image.png

指令 分号结尾 指令块 {}里面包裹指令 注释使用#号

默认是nobody 进行d

image.png

image.png

可以设置为root image.png

error_log

Nginx的错误信息是调试Nginx服务的重要手段,属于核心功能模块(ngx_core_module)的参数,该参数的名字为error_log,可以放在Main区块中全局配置,也可以放在不同的虚拟主机中单独记录虚拟主机的错误信息

image.png

server块 虚拟主机?

server块:配置虚拟主机的相关参数,一个http中可以有多个server。

可以理解为一个虚拟服务器或者虚拟主机

pid

用来配置Nginx当前master进程的进程号ID存储的文件路径

pid /nginx/pid/nginx.pid;   #指定nginx进程运行文件存放地址

浏览器中可以显示的内容有HTML、XML、GIF等种类繁多的文件、媒体等资源,浏览器为了区分这些资源,就需要使用MIME Type ,MIME Type是网络资源的媒体类型 mime type 和文件扩展名的对应关系一般放在 mime.types这个文件里,然后用 include mime.types; 来加载 mime.types文件里是用types指令来定义的

include mime.types,相当于把mime.types文件中MIMT类型与相关类型文件的文件后缀名的对应关系加入到当前的配置文件中

default_type:用来配置Nginx响应前端请求默认的MIME类型

image.png

access log

image.png

image.png

Nginx开启sendfile配置来提高文件的传输速率

keepalive_timeout

image.png

server_name

image.png

listen 80; #描述虚拟主机接受连接的地址和端口 
server_name localhost; #内网:主机名,外网:域名 可以是多个域名,用空格隔开

location

image.png

没有修饰符 表示:必须以指定模式开始

=表示:必须与指定的模式精确匹配

~ 表示:指定的正则表达式要区分大小写

~* 表示:指定的正则表达式不区分大小写

^~ 类似于无修饰符的行为,也是以指定模式开始,不同的是,如果模式匹配,
那么就停止搜索其他模式了。

参考: zhuanlan.zhihu.com/p/60909782

image.png

image.png

image.png

image.png

image.png

include

image.png

vim imooc.conf 将配置写到这个文件中 然后include也是可以的 image.png

nginx 日志切割

因为访问日志 和启动日志 都放到 access.log和error.log中 日积月累会很大,针对日志做切割很重要

#设置log日志的存储地址
LOG_PATH=/home/soft/nginx/logs
#设置历史日志的存储地址
HISTORY_LOG_PATH=/home/soft/nginx/history_logs
#获取分割日志时所需要的时间当做日志文件名称
TIME=$(date +%Y-%m-%d)
#将当前日志备份到指定存储目录
mv ${LOG_PATH}/access.log ${HISTORY_LOG_PATH}/access_log/${TIME}_access.log
#发送信号重新打开日志文件
kill -USR1 $(cat ${LOG_PATH}/nginx.pid)
#!/bin/bash
#此脚本用于自动分割Nginx的日志,包括access.log和error.log
#每天00:00执行此脚本 将前一天的access.log重命名为access-xxxx-xx-xx.log格式,并重新打开日志文件
#Nginx日志文件所在目录
LOG_PATH=/opt/nginx/logs
#获取昨天的日期
YESTERDAY=$(date -d "yesterday" +%Y-%m-%d)
#获取pid文件路径
PID=/var/run/nginx/nginx.pid
#分割日志
mv ${LOG_PATH}access.log ${LOG_PATH}access-${YESTERDAY}.log
mv ${LOG_PATH}error.log ${LOG_PATH}error-${YESTERDAY}.log
#向Nginx主进程发送USR1信号,重新打开日志文件
kill -USR1 `cat ${PID}`

系统将 进程xx 的 进程号 存储 在 /var/run/xx.pid 文件下 ;所以 cat /var/run/nginx.pid 是为了 取到 nginx 的进程号

首先确定一下/usr/local/nginx/logs/nginx.pid 这个文件存储的是nginx的pid号,当启动nginx这个程序时会自动生成这个文件,当关闭nginx程序时,这个nginx.pid的文件就会消失

nginx 静态资源服务器

location 是不能重复的 会报错

image.png

root

#正确配置
location /activity {
    root /home/www/site;
    index index.html index.htm;
}
这样的话,那么我们访问的目录就是/home/www/site/activity

alias 别名

image.png

可以开启GZIP压缩

gzip on

image.png

http {
  # 开启gzip
  gzip on;

  # 启用gzip压缩的最小文件;小于设置值的文件将不会被压缩
  gzip_min_length 1k;

  # gzip 压缩级别 1-10 
  gzip_comp_level 2;

  # 进行压缩的文件类型。

  gzip_types text/plain application/javascript application/x-javascript text/css application/xml text/javascript application/x-httpd-php image/jpeg image/gif image/png;

  # 是否在http header中添加Vary: Accept-Encoding,建议开启
  gzip_vary on;
}

image.png

location

= 精确匹配 image.png

~ ~* 正则匹配 ~* 不区分大小写

image.png

^~ 以某个字符路径开头

域名解析

image.png

nginx的ip是公网ip 可以通过浏览器域名访问nginx

目标服务器 是内网 内网之间是可以通信的

switchhosts 软件可以配置域名和ip映射 开源免费

nginx 跨域

image.png

CORS是一个W3C标准,全称是"跨域资源共享"(Cross-origin resource sharing)。

它允许浏览器向跨源服务器,发出XMLHttpRequest请求,从而克服了AJAX只能同源使用的限制。

浏览器一旦发现AJAX请求跨源,就会自动添加一些附加的头信息,有时还会多出一次附加的请求,但用户不会有感觉

image.png

image.png

nginx防盗链