Nginx学习笔记

Nginx是一个高性能的HTTP和反向代理服务器,以高稳定性、丰富的功能集、示例配置文件和低系统资源的消耗而闻名。

Nginx

常见的版本

  • Nginx 开源版
  • Nginx plus 商业版
  • OpenResty
  • Tengine

安装NGINX(开源版)

官网 https://nginx.org

安装步骤:

  • 安装依赖 gcc pcre pcre-devel zlib zlib-devel
  • ./configure --prefix=/usr/local/nginx
  • make
  • make install
  • 启动 安装目录/sbin/nginx

配置文件

默认在安装目录的conf中的nginx.conf文件

nginx最小配置

# 指定worker进程数  一般填写物理cpu内核数
# 在nginx中,启动后先由master进程解析配置文件,接收请求,由worker进程返回结果
work_processes	1;

events {
    worker_connections	1024;  # 一个worker进程可以同时建立多少个连接
}

http {
    # 引入mime.types  该文件处理请求头与文件类型的对应关系
    include	mime.types;  
    # 如果没有匹配到文件类型,默认设置二进制文件头,浏览器会提示下载
    default_type	application/octet-stream;
    # 开启数据0拷贝
    sendfile	on;
    # 请求保持时间
    keepalive_timeout	65;
    
    # 一个server代表一个主机,一个主机代表一个独立站点,每个主机互不干扰
    # 虚拟主机 vhost
    server {
        # 监听端口
        listen	80;
        # 主机名,域名
        server_name	localhost;
        # 路径 uri(域名之后)
        location / {
            # 资源根目录
            root	html;
            # 默认页
            index	index.html index.htm;
        }
        # 错误页
        error_page   500 502 503 504  /50x.html;
        # 文件位置
        location = /50x.html {
            root   html;
        }
    
    }
}

**零拷贝(Zero-Copy)**是一种 I/O 操作优化技术,可以快速高效地将数据从文件系统移动到网络接口,而不需要将其从内核空间复制到用户空间。其在 FTP 或者 HTTP 等协议中可以显著地提升性能。

虚拟主机配置

server {
listen 80;
# 可以使用通配符 * 也可使用正则 ~^[0,9]+\.reboots\.com$ ,匹配从上至下
server_name reboots.com;
}

这两个参数唯一标识一个虚拟主机不能同时存在一组相同端口相同域名的虚拟主机

实用:通过80端口创建两个虚拟主机通过不同的域名访问

只需要写两个server同时监听80端口,域名设置不同即可

如果没有匹配上,根据端口选择第一个站点

反向代理与负载均衡

通过nginx代理访问 配置如下:

location / {
proxy_pass  url;
}

通过nginx代理配置负载均衡, 对于性能差的服务器可以通过权重来减轻负载

weight权重,配置访问比例,

down下线,不会再轮到它

backup 备用,其他全down才会轮到它

upsteam	urls{
    server 192.168.1.1:80 weight=1;
    server 192.168.1.2:80 weight=3;
    server 192.168.1.3:80 weight=3 down;
}

server{
    location / {
        proxy_pass  http://urls;
    }
    ...
}

轮询的缺陷,无法保持会话

解决方法,不用会话,用无状态的token

其他方式

  • ip_hash 通过IP地址保持访问同一个服务,但是在当今不能做到保持会话
  • least_conn 最少连接访问
  • url_hash 根据用户访问的URL定向转发请求
  • fair 根据后端响应时间,转发请求

Nginx动静分离

例如,将tomcat中的静态文件copy到nginx中,由nginx + 0拷贝,减少非必要开销

UrlRewrite

rewrite	^/([0-9]+).html$	/index.jsp?pageNum=$1	break;

文件上传问题

25.3.27
nginx 默认 1M 非常小,超过大小报错413,需要特殊配置一下。

# 加到http中,http下的作用域都将生效
client_max_body_size 20m;