简介
Nginx是一款高性能的http 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器。
- http服务器。Nginx是一个http服务可以独立提供http服务,可以做网页静态服务器。
- 虚拟主机。可以实现在一台服务器虚拟出多个网站。例如个人网站使用的虚拟主机。
- 反向代理,很方便的实现动静分离以及负载均衡。当网站的访问量达到一定程度后,单台服务器不能满足用户的请求时,需要用多台服务器集群可以使用nginx做反向代理。并且多台服务器可以平均分担负载,不会因为某台服务器负载高宕机而某台服务器闲置的情况。
如果一个服务由多个服务器提供,需要把负载分配到不同的服务器处理,需要负载均衡。 可以根据服务器的实际情况调整服务器权重。权重越高分配的请求越多,权重越低,请求越少。默认是都是1
工作原理
nginx由内核和模块组成。其中,内核的设计非常微小和简洁,完成的工作也非常简单,仅仅通过查找配置文件将客户端请求映射到一个location block(location是nginx配置中的一个指令,用于URL匹配),而在这个location中所配置的每个指令将会启动不同的模块去完成相应的工作。
常用命令
- 启动:start nginx
- 停止:nginx.exe -s stop/quit
- 重启:nginx.exe -s reload
主要配置
# ------------全局块:设置一些影响 nginx 服务器整体运行的配置指令------------
worker_processes 1; # 允许生成的进程数,默认为1
# ------------events 块:配置影响主要影响 Nginx 服务器与用户的网络连接------------
events {
worker_connections 1024; # 每个 work process 支持的最大连接数为 1024
}
# ------------http 块------------
http {
# ------------http 全局块:文件引入、MIME-TYPE 定义、日志自定义、连接超时时间、单链接请求数上限等------------
include mime.types; # 文件扩展名与文件类型映射表
default_type application/octet-stream; # 默认文件类型,默认为text/plain
sendfile on; # 是否取消服务日志,这里为打开
keepalive_timeout 65; # 连接超时时间,默认为75s,可以在http,server,location块
client_max_body_size 100m; #控制全局nginx所有请求报文大小
upstream mysvr { # 负均衡时配置多个服务器
server 127.0.0.1:7878;
server 192.168.10.121:3333 backup; #热备
}
# ------------server 块:每个 http 块可以包括多个 server 块,而每个 server 块就相当于一个虚拟主机------------
server {
# ------------server 全局块:最常见的配置是本虚拟机主机的监听配置和本虚拟主机的名称或 IP 配置------------
listen 9000; # 监听端口
server_name localhost; # 监听地址
access_log logs/fzzapp_access.log;
error_log logs/fzzapp_error.log;
error_page 500 502 503 504 /50x.html
# ------------location 块:这块的主要作用是基于 Nginx 服务器接收到的请求字符串(例如 server_name/uri-string),对虚拟主机名称(也可以是 IP 别名)之外的字符串(例如 前面的 /uri-string)进行匹配,对特定的请求进行处理。地址定向、数据缓存和应答控制等功能,还有许多第三方模块的配置也在这里进行。------------
location = /error.html {
root html;
}
location = /50x.html {
root html;
}
location /app/index.html {
return 404;
}
location / { # 请求的url过滤,正则匹配,~为区分大小写,~*为不区分大小写。
root html; # 根目录
index index.html index.html; # 设置默认页
proxy_pass http://mysvr; # 请求转向mysvr 定义的服务器列表
}
location /api {
proxy_pass https://fz.test.com:9977/api;
}
location /file {
root /app/file; # 根目录
}
}
}