Nginx 是开源、高性能、高可靠的 Web 和反向代理服务器,而且支持热部署,几乎可以做到 7 * 24 小时不间断运行,即使运行几个月也不需要重新启动,还能在不间断服务的情况下对软件版本进行热更新。性能是 Nginx 最重要的考量,其占用内存少、并发能力强、能支持高达 5w 个并发连接数,最重要的是, Nginx 是免费的并可以商业化,配置使用也比较简单。
Nginx特点:
高并发、高性能; 模块化架构使得它的扩展性非常好; 异步非阻塞的事件驱动模型这点和 Node.js 相似; 相对于其它服务器来说它可以连续几个月甚至更长而不需要重启服务器使得它具有高可靠性; 热部署、平滑升级; 完全开源,生态繁荣; 更多内容查看这篇:《 Nginx 离线安装与介绍 》
一、配置(nginx.conf) nginx.conf 配置文件的语法规则:
配置文件由 指令 与 指令块 构成; 每条指令以 ; 分号结尾,指令与参数间以空格符号分隔; 指令块以 {} 大括号将多条指令组织在一起; include 语句允许组合多个配置文件以提升可维护性; 通过 # 符号添加注释,提高可读性; 通过 $ 符号使用变量; 部分指令的参数支持正则表达式,例如常用的 location 指令. Nginx 的典型配置示例:
main 全局配置,对全局生效; events 配置影响 Nginx 服务器与用户的网络连接; http 配置代理,缓存,日志定义等绝大多数功能和第三方模块的配置; server 配置虚拟主机的相关参数,一个 http 块中可以有多个 server 块; location 用于配置匹配的 uri ; upstream 配置后端服务器具体地址,负载均衡配置不可或缺的部分; #1. main段配置信息 user nginx; 运行用户,默认即是nginx,可以不进行设置 worker_processes auto; 进程数,一般设置为和 CPU 核数一样 error_log /var/log/nginx/error.log warn; 的错误日志存放目录 pid /var/run/nginx.pid; 服务启动时的 pid 存放位置 #2. events段配置信息 events { use epoll; 使用epoll的I/O模型(缺省会自动选择一个最适合你操作系统的) worker_connections 1024; 每个进程允许最大并发数 } #3. http段配置信息 #配置使用最频繁的部分,代理、缓存、日志定义等绝大多数功能和第三方模块的配置都在这里设置 http { 设置日志模式 log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; access_log /var/log/nginx/access.log main; 访问日志存放位置 sendfile on; 开启高效传输模式 tcp_nopush on; 减少网络报文段的数量 tcp_nodelay on; keepalive_timeout 65; 保持连接的时间,也叫超时时间,单位秒 types_hash_max_size 2048; include /etc/nginx/mime.types; 文件扩展名与类型映射表 default_type application/octet-stream; 默认文件类型 . server段配置信息 server { listen 80; 配置监听的端口 server_name localhost; 配置的域名 . location段配置信息 location / { root /usr/share/nginx/html; 网站根目录 index index.html index.htm; 默认首页文件 deny 172.168.22.11; 禁止访问的ip地址,可以为all allow 172.168.33.44; 允许访问的ip地址,可以为all } error_page 500 502 503 504 /50x.html; 默认50x对应的访问页面 error_page 400 404 error.html; 同上 } 加载子配置项 include /etc/nginx/conf.d/*.conf; } ### 1.1 内置变量 nginx 常用的内置全局变量,你可以在配置中随意使用,点此查看效果: [内置变量实例演示](https://www.cnblogs.com/librarookie/p/#%E5%86%85%E7%BD%AE%E5%8F%98%E9%87%8F%E5%AE%9E%E4%BE%8B%E6%BC%94%E7%A4%BA "实例传送阵") | 变量 | 说明 | | --- | --- | | $args | 请求中的参数,例: baidu.com/?a=1&b=1 中的a和b | | $content\_length | HTTP 请求信息里的"Content-Length" | | $content\_type | HTTP 请求信息里的"Content-Type" | | $document\_root | nginx 虚拟主机配置文件中的 root 参数对应的值 | | $document\_uri | 当前请求中不包含指令的 URI | | $host | 主机头,也就是域名 | | $http\_user\_agent | 客户端的详细信息,也就是浏览器的标识 | | $http\_cookie | 客户端的 cookie 信息 | | $limit\_rate | 如果 nginx服务器使用limit\_rate 配置了显示网络速率,则会显示,如果没有设置,则显示0 | | $remote\_addr | 客户端的公网ip | | $remote\_user | 如果 nginx有配置认证,该变量代表客户端认证的用户名 | | $request\_body\_file | 做反向代理时发给后端服务器的本地资源的名称 | | $request\_method | 请求资源的方式,GET /PUT /DELETE等 | | $request\_filename | 当前请求的资源文件的路径名称 | | $request\_uri | 请求的链接,包括$document\_uri 和$args | | $scheme | 请求的协议,如ftp, http, https | | $server\_addr | 服务器IP地址 | | $server\_name | 服务器的主机名 | | $server\_port | 服务器的端口号 | ### 1.2 全局配置 #### 1.2.1 main 段核心参数 #1. user: 指定运行 Nginx 的 woker 子进程的属主和属组,其中组可以不指定。
...