0、安装准备
- 安装
Nginx 安装配置
安装完了后,软链一下,以后就可全局运行 nginx 命令
ln -s /usr/local/webserver/nginx/sbin/nginx /usr/local/bin
- nginx 关键目录
// 诸如 nginx 的配置文件,日志文件等
cd /usr/local/webserver/nginx
- 几个命令
// 启动 nginx
nginx
// 修改配置文件后重启 nginx
nginx -s reload
// 终止 nginx
nginx -s stop
// 检查 配置文件 语法是否有误
nginx -t -c **/**.conf
1、语法基础
location
语法: location [=||*|^~|@] /uri/ { … } 或 location @name { … }
- location 的2种匹配模式
普通字符串匹配:以=开头或开头无引导字符(~)的规则
正则匹配:以~或~开头表示正则匹配,~表示正则不区分大小写
总体的匹配原则是:先匹配普通字符串模式,再匹配正则模式。
一个请求过来后,Nginx匹配这个请求的流程如下:
- 先查找是否有=开头的精确匹配,如:location = /test/abc/user.do { … }
- 再查找普通匹配,以 最大前缀 为原则,如有以下两个location,则会匹配后一项
location /test/ { … }
location /test/abc { … } - 匹配到一个普通格式后,搜索并未结束,而是暂存当前匹配的结果,并继续搜索正则匹配模式
- 所有正则匹配模式location中找到第一个匹配项后,就以此项为最终匹配结果
所以正则匹配项匹配规则,受定义的前后顺序影响,但普通匹配模式不会 - 如果未找到正则匹配项,则以3中缓存的结果为最终匹配结果
- 如果一个匹配都没搜索到,则返回404
location =/ { … } // 精准匹配
location / { … } // 模糊匹配,贪婪原则
location ~ /test/.+.jsp$ { … } // 正则匹配
location ^~ / { … } // ^~意思是关闭正则匹配,当搜索到这个普通匹配模式后,将不再继续搜索正则匹配模式
root 与 alias
当资源匹配上 location 时,
root: root + location配置的路径 = 资源在磁盘真实寻找路径
alias: alias = 资源在磁盘真实寻找路径
proxy-pass 中的 /
在nginx中配置proxy_pass代理转发时,如果在proxy_pass后面的url加/,表示绝对根路径;如果没有/,表示相对路径,把匹配的路径部分也给代理走。
假设下面四种情况分别用 http://192.168.1.1/proxy/test.html 进行访问。
第一种:
location /proxy/ {
proxy_pass http://127.0.0.1/;
}
代理到URL:http://127.0.0.1/test.html
第二种(相对于第一种,最后少一个 / )
location /proxy/ {
proxy_pass http://127.0.0.1;
}
代理到URL:http://127.0.0.1/proxy/test.html
第三种:
location /proxy/ {
proxy_pass http://127.0.0.1/aaa/;
}
代理到URL:http://127.0.0.1/aaa/test.html
第四种(相对于第三种,最后少一个 / )
location /proxy/ {
proxy_pass http://127.0.0.1/aaa;
}
代理到URL:http://127.0.0.1/aaatest.html
2、常用配置
2.1 主配置文件
#user www www;
#nginx进程数,建议设置为等于CPU总核心数。
worker_processes 1;
#工作模式与连接数上限
events {
#单个进程最大连接数(最大连接数=连接数*进程数)
worker_connections 1024;
}
#设定http服务器
http {
#文件扩展名与文件类型映射表
include mime.types;
#默认文件类型
default_type application/octet-st
error_log logs/error.log;
sendfile on;
#防止网络阻塞
tcp_nopush on;
#长连接超时时间,单位是秒
keepalive_timeout 65;
#开启gzip压缩输出
gzip on;
# 把其他 server 配置写到其他文件,方便管理
include ../vhost/*.conf;
}
2.2 Server 配置
server {
listen 80;
server_name localhost test.ycfeng.site;
location / {
root /root/frontend/testjenkins/;
index index.html index.htm;
}
location /static/ {
root /frontend/dist/;
}
}
2.3 反向代理
server {
listen 8182;
server_name localhost;
location / {
proxy_pass http://localhost:8082;
}
}
2.4 负载均衡配置
http {
upstream myproject {
server 127.0.0.1:8000 weight=3;
server 127.0.0.1:8001;
server 127.0.0.1:8002;
server 127.0.0.1:8003;
}
server {
listen 80;
server_name www.domain.com;
location / {
proxy_pass http://myproject;
}
}
}
3、常见问题
- 401
往往是路径配置不对 - 403
往往是 root 路径无访问权限,chmod a+x /root ;然后 nginx -s reload 一般可以解决
网友评论