• 高性能的 HTTP 和反向代理服务器,同时也是 IMAP/POP3/SMTP 代理服务器
  • Nginx 分为主进程(master process)和工作进程(worker process),每个进程中只有一个线程(也可以配置线程池),通过 IO 多路复用(底层使用 epoll/kqueue 等技术)和事件循环达到高并发。主进程负责总体协调工作,比如在配置文件更新后重新应用配置、协调哪个 worker process 应该退役等等。工作进程的个数一般设置为 CPU 的个数。

Nginx 的启动和停止

  • start nginx.exe:启动
  • nginx [-c /etc/nginx/nginx.conf]:启动,可同时指定主配置文件
  • nginx -h
  • nginx -s 信号:向正在运行的 nginx 进程发送信号,信号包括:
    • stop:立即关闭
    • quit:安全关闭(处理完请求后在停止服务)
    • reload:重载配置文件
    • reopen:重新打开日志文件,实现日志分隔的效果
  • nginx -t:检查配置文件是否存在语法错误
  • nginx -v:查看当前 nginx 的版本信息
  • nginx -V:查看当前 nginx 的编译信息,如安装的模块、安装目录、各种文件的目录、编译器选项等

Nginx 的配置文件 nginx.conf

  1. #user nobody; #指定使用的用户和组
  2. worker_processes 1; #启动进程,通常设置成和cpu的数量相等
  3. #全局错误日志
  4. error_log logs/error.log;
  5. #error_log logs/error.log notice;
  6. #error_log logs/error.log info;
  7. #pid logs/nginx.pid; #PID文件--存放进程号的文件
  8. #创建全局配置中nginx需要的运行用户
  9. #groupadd nginx
  10. #useradd -g nginx nginx
  11. #工作模式及连接数上限
  12. events {
  13. worker_connections 1024; #单个后台worker process进程的最大并发链接数
  14. #并发总数是 worker_processes 和 worker_connections 的乘积
  15. }
  16. #Nginx对HTTP服务器相关属性的配置
  17. http {
  18. include mime.types;
  19. default_type application/octet-stream; #设定默认类型为二进制流
  20. #log_format main '$remote_addr - $remote_user [$time_local] "$request" '
  21. # '$status $body_bytes_sent "$http_referer" '
  22. # '"$http_user_agent" "$http_x_forwarded_for"';
  23. #access_log logs/access.log main;
  24. sendfile on;
  25. #tcp_nopush on;
  26. #keepalive_timeout 0;
  27. keepalive_timeout 65;
  28. #gzip on;
  29. include vhost/*.conf;
  30. #设定 localhost 对应的虚拟主机
  31. server {
  32. listen 80; #监听80端口
  33. server_name localhost; #定义使用 www.example.cn 访问
  34. #root D:\code; #定义服务器的默认网站根目录位置
  35. #charset koi8-r; #设置编码
  36. #access_log logs/host.access.log main; #设定本虚拟主机的访问日志
  37. #主要用于匹配网页位置,设置不同的功能特征
  38. location / {
  39. root html; #定义当前 location 的文档根目录为 html 目录
  40. index index.html index.htm; #定义首页索引文件的名称
  41. }
  42. #error_page 404 /404.html;
  43. # redirect server error pages to the static page /50x.html
  44. error_page 500 502 503 504 /50x.html;
  45. location = /50x.html {
  46. root html;
  47. }
  48. include vhost/*.conf;
  49. }

Nginx 的虚拟主机

  • 虚拟主机是用来映射网站目录和网站代码文件夹的关系
  • 可以通过 server 配置,每个 server 表示一个虚拟机主机

动静分离

  • 当用户请求 js、css 等静态资源时有当前 Nginx 服务器处理,请求 php 动态脚本代码时由其他的服务器处理(反向代理)
  1. # 配置 Nginx 动静分离,定义的静态页面直接从 Nginx 发布目录读取
  2. location ~ .*\.(gif|jpg|jpeg|bmp|png|ico|txt|js|css)$ {
  3. root /data/www/wugk;
  4. #expires 定义用户浏览器缓存的时间为 3 天
  5. expires 3d;
  6. }
  7. # 动态页面交给其他服务器处理
  8. location ~ .*\.(php|jsp|cgi)?$ {
  9. # 发送给其他服务器处理
  10. }

Nginx 的反向代理

  • 反向代理(Reverse Proxy)方式是指以代理服务器来接受 internet 上的连接请求,然将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给 internet 上请求连的客户端,此时代理服务器对外就表现为一个服务器
  • 代理服务器可以作为前端服务器处理静态资源
  1. server {
  2. # 侦听 192.168.8.x 的 80 端口
  3. listen 80;
  4. server_name www.itsource.cn;
  5. # 反向代理时获取客户端真实 IP、域名、协议、端口
  6. proxy_set_header Host $http_host;
  7. proxy_set_header X-Real-IP $remote_addr;
  8. proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  9. proxy_set_header X-Forwarded-Proto $scheme;
  10. # 对 php 后缀的进行请求
  11. location ~ .*\.php$ {
  12. # 定义服务器的默认网站根目录位置
  13. root /root;
  14. # 定义首页索引文件的名称
  15. index index.php index.html index.htm;
  16. # 请求转向 apache 服务器,apache 服务器运行在 81 端口上
  17. proxy_pass http://localhost:81;
  18. }
  19. }

Nginx 的负载均衡

  • 优点:分散后台服务器的压力;自动去掉不可用的后台服务器;缓存后台服务器响应内容

  • 负载均衡的分配策略:轮询(默认)、weight、ip_hash、fair(第三方,按后端服务器的响应时间来分配请求,响应时间短的优先分配)、url_hash(第三方)

  • 负载均衡配置

  1. # 在 http 节点中定义负载均衡设备的 ip 及设备状态
  2. upstream myServer {
  3. # ip_hash;
  4. # down 表示当前的 server 暂时不参与负载
  5. server 127.0.0.1:9090 down;
  6. # weight 默认为 1,weight 越大,负载的权重就越大
  7. server 127.0.0.1:8080 weight=2;
  8. server 127.0.0.1:6060;
  9. # 其它所有的非 backup 机器 down 或者忙的时候,请求 backup 机器
  10. server 127.0.0.1:7070 backup;
  11. [ip_hash | fair | url_hash]
  12. }
  13. # 在需要使用负载的 server 节点下添加
  14. proxy_pass http://myServer;