nginx 2进制安装
1.1 安装gcc
GCC用来对nginx源码进行编译
yum -y install gcc-c++
1.2 安装pcre
Nginx的Rewrite模块和HTTP核心模块会使用到PCRE正则表达式语法。
这里需要安装两个安装包pcre和pcre-devel。
第一个安装包提供编译版本的库,而第二个提供开发阶段的头文件和编译项目的源代码
yum install -y pcre pcre-devel
1.3 安装zlib
zlib库提供了开发人员的压缩算法,在Nginx的各种模块中需要使用gzip压缩
yum install -y zlib zlib-devel
1.4 安装安装Open SSL
nginx不仅支持 http协议,还支持 https(即在 ssl 协议上传输 http)。
如果使用了 https,需要安装 OpenSSL 库.
yum install -y openssl openssl-devel
2.1 官网下载安装包
官网下载地址: https://nginx.org/en/download.html
2.2 将安装包下载到/opt目录中
curl -O https://nginx.org/download/nginx-1.22.0.tar.gz
2.3 解压缩
tar -zxvf nginx-1.22.0.tar.gz
2.4 进入到解压后的目录执行配置命令
./configure --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module
#配置
#--prefix指定安装目录
#--with-http_ssl_module安装https模块
#creating objs/Makefile 代表编译成功
2.5 编译
make
2.6 安装
make install
2.7 启动nginx
cd /usr/local/nginx/sbin
./nginx
到浏览器进行访问看nginx是否已经启动
三、配置环境变量
3.1 编辑/etc/profile文件
vi /etc/profile
添加nginx路径。
刷新配置文件
source /etc/profile
nginx被加入到了系统path环境变量中了
3.2 查看nginx的版本信息
nginx -v
nginx配置
一般匹配:
但是需要注意的是,如果输入的path和location都没有匹配中,并且存在一个空值的location,那么还是会去匹配这个空的,如下图:
= 精准匹配
当uri部分完全匹配上了,才路由到该location中,并且直接返回,哪怕后面存在其它的一些正则的location,也不会再去匹配了。如图
但是需要注意的是:精准匹配是不参与一般匹配的,如下图:
~ 不忽略大小的正则匹配
^~ 非正则匹配
优先级
但是,如果上面图中不写 “root /xxx/xxx”的话,那么nginx就是去找默认目录,即“/usr/local/nginx/html”,如果是用自义的目录,那么就必须使用root 指定。在实际使用中最好使用绝对目录,而少用相对目录。
【注意】:root 后面跟的目录要不要“/”都一样
如上面图中所示,“ttt”相当于是对被负载的服务器作统一管理而取的名称,server指的是向nginx说明它是一个服务器,weight是表示权重,也就是说在被反向代理的时候,nginx会去轮询”ttt”里面的服务器,有2/3的命中“192.168.1.10:8080”这个服务器,有1/3的命中“192.168.1.102:8080”这个服务器。如果访问url为“www.enjoy_4/upstream_test/xxxx”,那么最终发送后是http://192.168.1.10:8080/xxxx和http://192.168.1.102:8080/xxxx,如果不权重weight不指定的话,那么就相当于是weight = 1,也就是说均匀的各一次。一个.conf文件中可以有多个upstream配置
rewrite
语法 :
rewrite regex replacement [flag]; 其中regex-正则,replacement-替换后面的结果, flag-处理的标志
flag=【break/last/redirect/permanent】
^/ 表示进入location后无论是什么都是匹配的。
如/xx.js,那么这样总是报错的。
一个location中可以有多个rewrite
permanent-也会和redirect一样的效果,只是一个是301重定向,一个是302重定向
如果rewrite后面没有被break打断的话,那么就有机会触发下一轮从上往下进行location的匹配,也就是需要将当前的location走完,然后再去匹配新的location了;但是使用last就会提前触发下一轮从上往下进行location匹配,也就是说不需要将当前的location走完,就去匹配新的location了。
有break则直接被打断,无论其后有没有其它的rewrite,也不再去匹配新的location了,若有root声明,就会去root声明的目录下找资源;
无则不会被打断,在当前的location中还是会依然自上往下走的,比如有在当前的location中写了多行rewrite,并且这些reswrite后均没 有break的话,则最后一行rewrite生效,若有root声明,也不会去root声明的目录下找资源,而是离开当前的location,去新的location 中做匹配。
还需要注意一点的是rewrite不仅可以写在location里面,还可以写在location外面,也可以实现对域名作重定向。如下图:
什么意思呢? 也就是说如果请求地址为:http://sales.enjoy.com,最后会跳转到https://sales.enjoy.com
nginx配置文件修改后reload一下就可以了,不需要重新启动nginx
nginx -s reload**