nginx配置和使用
nginx的配置和使用
nginx是什么
nginx是http服务,处理和转发http请求。
nginx能做什么
1. 反向代理
2. 负载均衡
3. 处理静态资源
等
nginx配置组成

main、server(主机设置)、upstream(负载均衡服务器设置)和 location(URL匹配特定位置的设置)。
main块 包含events、http、全局配置;
server块 虚拟服务 主要用于指定主机和端口;
location 块用于路由。
upstream 指令主要用于负载均衡,设置一系列的后端服务器;
默认配置
# Nginx运行的用户和用户组
#user wrd wrd;
# 运行的进程数
worker_processes 1;
# 错误日志,后面是 错误日志定义等级
error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
#pid logs/nginx.pid;
# 事件模块
events {
# 单个后台worker process进程的最大并发链接数 (最大连接数=连接数*进程数)
worker_connections 1024;
}
http {
include mime.types;
# 定义内容类型为 任意的二进制数据
default_type application/octet-stream;
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 logs/access.log main;
# 调用内核函数sendfile 来文件传输
sendfile on;
# 设置0 禁用
#keepalive_timeout 0;
# 长连接超时时间
keepalive_timeout 65;
# 开启gzip压缩
#gzip on;
server {
listen 8000;
server_name somename alias another.alias;
location / {
root html;
# 定义首页索引文件的名称
index index.html index.htm;
}
}
include servers/*;
}
location
location = / {
# 精准匹配
echo "location A";
}
location / {
echo "location B";
}
location /book/ {
# 普通前缀匹配
echo "location C";
}
location /images/abc {
# 普通前缀匹配
echo "location H";
}
location /images {
# 普通前缀匹配
echo "location G";
}
location ^~ /images/ {
# 前缀匹配
echo "location E";
}
location ~ /book/abc {
# 正则匹配
echo "location D";
}
location ~* \.(gif|jpg|jpeg)$ {
# 正则匹配
echo "location F";
}
location ~ /images/abc/ {
# 正则匹配
echo "location I";
}
location ~ /images {
# 正则匹配
echo "location J";
}
= 开头表示精确匹配
如 A 中只匹配根目录结尾的请求,后面不能带任何字符串。
^~ 开头表示uri以某个常规字符串开头,不是正则匹配
~ 开头表示区分大小写的正则匹配;
~* 开头表示不区分大小写的正则匹配
/ 通用匹配, 如果没有其它匹配,任何请求都会匹配到
匹配逻辑:
if 精确匹配结果
return 精确匹配结果
最长前缀结果 = longest: 普通前缀匹配(空格) or 前缀匹配(^~)
if 最长前缀结果 属于 前缀匹配(^~)
return 最长前缀结果
首个正则结果 = first: 大小写敏感匹配(~) or 大小写不敏感匹配(~*) or 大小写敏感不匹配(!~) or 大小写不敏感不匹配(!~*)
if 首个正则结果:
return 首个正则结果
else:
return 最长前缀结果
upstream 负载均衡
# 默认轮询
http {
upstream myapp1 {
server srv1.example.com;
server srv2.example.com;
server srv3.example.com;
}
server {
listen 80;
location / {
proxy_pass http://myapp1;
}
}
}
# 权重
http {
upstream myapp1 {
server srv1.example.com weight=4 down; # 下线
# 超过3次失败,30后尝试再请求这台机器
server srv2.example.com weight=2 max_fails=3 fail_timeout=30s;
server srv3.example.com weight=1;
}
server {
listen 80;
location / {
proxy_pass http://myapp1;
}
}
}
# ip_hash ip固定分发到一台机器
# least_conn 最少连接负载均衡