nginx基本使用
nginx是俄罗斯人编写的轻量级http服务器,具有如下特点:
- 处理静态文件
- 作为反向代理服务器
- 简单的负载均衡和容错
- 模块化结构
- 支持SSL和TLSSNI
1. 安装
// 在mac环境下
brew install nginx
安装后,mac下默认的配置位于 /usr/local/etc/nginx
。
2. 配置
nginx的命令分为简单命令、块级命令,基本格式 command paramter;
。
nginx的配置分为四部分:全局配置(main)、主机配置(server)、上游服务器配置(upstream)、location配置。
2.1 全局配置
与具体业务无关的参数,例如工作进程、身份等信息。
user www www; // nginx子进程运行的用户和用户组
work_process 10; // nginx子进程的个数
error_log path; // 错误日志存放的地址
pid path; // 主进程pid存放地址
2.2 events
用于设置服务端与用户的网络连接
events {
worker_connections: 1024; // 最大连接数
}
2.3 http
http {
include mime.type; // 文件拓展名与文件类型映射表
gzip on;
server {
listen 5000;
server_name li.com;
location pathname {
...
}
location pathname {
...
}
}
}
2.4 server配置
server {
server ip/host/upstream; // 可以支持多个域名
index aa.html; //首页的配置
error_page 404 /error.html; // 错误页面的重定向
location pathname {
}
}
- 当为ip/host: 直接指定就可以
- 当为upstream时
upstream name {
server ip/host [params]; // params可能为weight(指定权重)、backup(作为备用服务)
...
}
关于upstream的集中方式:
- 轮询: 根据时间进行轮询,依次将请求分发到不同的机器上
- 带权重的轮询: params为weight=number,其中number指定权重,确定分发到该机器上的概率
- ip_hash: 根据ip得到hash值,将某个ip地址,固定分发到某个机器上
2.5 location配置
location /z-demo {
root /a; // 如果访问http://a.com/z-demo/test.png => /a/z-demo/test.png
alias /a; // 如果访问http://a.com/z-demo/test.png => /a/test.png
deny ip; // 拒绝的ip地址
allow ip; // 白名单ip
}
location /egg {
proxy_pass http://127.0.0.1:3000; // 代理到的地址
rewirte ~/egg(.*)/ /$1 break; // 修改映射规则
proxy_set_header Test ${constant or variable}; //可以往代理请求中添加头部信息
}
关于proxy_set_header:
- 格式 proxy_set_header key ${constant or variable};
- variable的范围:
- $host: 客户端请求的域名
- $remote_addr: 客户端请求的ip地址
- $proxy_host: 代理服务器nginx的地址
关于rewrite的设置方法
- 可以进行路径的重写:
rewrite /egg(.*) /$1 break;
- 可以进行整个重定向:
rewrite /egg(.*) http://xxxx [permanent];
// permanent区分301还是302
4. 命令行操作
nginx -c nginx.config // 启动nginx服务
nginx -t // 测试配置文件的有效性
nginx -s stop // 停止nginx服务
nginx -s quit // 以一种优雅的方式退出,主要是考虑此时可能还有请求需要处理
nginx -s reload // 重新启动服务
nginx -s reopen // 重新打开log
5. 遇到的问题
5.1 location配置后,访问返回403?
- 缺少
index
配置 - 文件没有读取权限
- nginx配置时,nginx的子进程没有指定用户
user www www