前言:
1. 对于前后端分离项目,想进行前后端交互吗?那你不学习一手nginx怎么行呢?
- 下载一个nginx,有window版的,也有linux版的,随你挑选好吧。下面我们就先以window版为例。
- 去网上下载完成后就是下面的鬼样子。
启动方法:双击exe文件或者使用命令行(感觉高级一点 哈哈哈)
补充:./usr/local/nginx/sbin/nginx (linux版的)
杀掉nginx服务命令:taskkill /im nginx.exe -f - 校验是否启动成功。访问localhost:80 就会出现
*附加:*如果在启动后,没有访问成功,如果你修改了配置文件的话 大概率是配置文件出问题了,你可以在
顺便给你们提供一个坑啊。
比如你把地址代理到了百度或者别的公网地址,出现
The requested URL / was not found on this server.
出现这种地址,但是你又非常确定地址没有写错。
那你就去检查一下你的hosts文件,位置在
顺便我把测试的配置给你们看一下吧
以上就是nginx环境的搭建。现在才刚开始。
正文:
- nginx是连接两个服务的一个桥梁,即使相隔万里,也能彼此如在眼前。这个桥梁可以在任何一方。
这里需要提一下啊 不是说 只能在A服务器上搭建nginx 实际上你在那个上面搭建都可以 跟你想在那个网站上访问哪个网站没有任何关系
2. linux 系统上安装nginx
一 . 先去下载一个nginx 网址:http://nginx.org/
二 . 准备依赖环境
#安装Nginx依赖环境,‐y表示所有提示默认选择y
yum -y install pcre pcre-devel
yum ‐y install zlib zlib‐devel
yum ‐y install openssl openssl‐devel
#安装gcc编译环境
yum -y install gcc
三. 解压并安装
# 进入home目录,解压
tar -zxvf nginx-1.17.5.tar.gz -C /home
# 进入 nginx目录
cd nginx-1.17.5
# 编译并安装【已经有gcc编译环境】
./configure
make
make install
# 安装成功之后,就会在/usr/local下多出了一个nginx目录
四. 启动
#进入nginx的sbin目录
cd /usr/local/nginx/sbin
#在sbin目录下启动
./nginx
#在sbin目录下停止
./nginx ‐s stop
#在sbin目录下重写加载
./nginx ‐s reload
#开放linux的对外访问的端口80,在默认情况下,Linux不会开放80端口号
#需要编辑iptables文件,参考 4.5 操作
#查看是否有nginx的线程是否存在
ps ‐ef | grep nginx
最后就是访问了 跟在window里面是一样的
最后我把我配置文件给你看一下
# 这里只粘了 需要我们改动的地方
server {
listen 7010;
server_name 192.168.23.169;
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
proxy_pass http://10.200.76.11:7003; #反向代理
# proxy_cookie_domain 10.200.76.11 10.200.77.70; #修改cookie里域名
index index.html index.htm;
# add_header Access-Control-Allow-Origin http://10.200.77.70; #当前端只跨域不带cookie时,可为*
add_header Access-Control-Allow-Credentials true;
add_header Access-Control-Allow-Origin *;
}
location /zgrm {
proxy_pass http://10.200.76.11:7003;
}
location /yssa {
proxy_pass http://10.200.76.11:7003;
}
nginx代理的实质:
在说它的实质之前 我先把 上面的nginx.conf 配置文件说明一下。
其他的都不用管 不是最重要的部分。
下面就说一下nginx代理的实质吧(个人理解)
所谓的nginx代理就是说把nginx当作一个桥,我们通过这个nginx可以从nginx所在的ip跳转到任意的ip地址下,也就是说 起到了一个更换ip地址+端口号的目的 。
需要提醒: 刚开始访问的地址必须是 nginx服务所在的ip以端口,并且只有我们请求的地址(端口后紧跟的位置)跟我们配置的拦截地址一样的时候才会跳转到指定的ip地址下。
特别点:
- nginx本身就是一个程序,一个服务。所以你就可以把它当作是一个服务处理就好理解了 所以我们配置的
server-name:就是服务所在的ip
listen:就是服务监听的端口 ,其实说监听不太好 实际就是服务所占的端口号,你用这个端口号了 ,也就相当于你用了nginx代理,要不然 你配置了也没有用 不过大家都是叫它监听端口号 - 还有一个要注意的是所谓的nginx代理 是看你的请求地址发的是什么,这样说可能不好理解,我举个例子:你在做集成系统的时候,把一个系统集成到另一个系统当中的时候,菜单跳转的时候,发送的地址的ip应该是你nginx的地址以及端口号,要不然 你就会存在跨域,你配置的是nginx的ip和端口,就是进入nginx 这个时候你就能跳转到你所指定的地址了。
看图好理解
nginx反向代理说完了 有啥不理解的可以留言!!!
配置文件描述
server {
listen 8876;
server_name 127.0.0.1;
client_header_buffer_size 512k;
large_client_header_buffers 4 512k;
client_max_body_size 20000m;
location / {
root D:/soft/java/nginx/nginx-1.20.1/nginx-1.20.1/html;
index index.html index.htm;
}
location /mainpage {
proxy_pass http://10.200.76.11:8086/index.html;
}
location /dzgzmh/ {
proxy_pass http://10.200.76.11:8086/dzgzmh/;
}
#账户请求路径
location /account/ {
proxy_pass http://10.200.76.11:8086/account/;
}
location /login {
# 过期后跳转到的页面路径,对于集成在门户中的报表工具,需要将此配置改为门户的登录页入口地址
return 302 /#/login;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
listen: 指定监听的地址和端口
listen address[:port];
listen port;
server_name NAME[…];后面可以跟多个主机,名称可使用正则表达式或者通配符
当有多个server时,匹配顺序如下:
- 先做精确匹配检查
- 左侧通配符匹配检查,如*.idfsoft.com
- 右侧通配符匹配检查,如mail.*
- 正则表达式匹配检查,如~ ^.*.idfsoft.com$
- default_server
# 以上规则简单总结就是优先级从高到低依次为(序号越小优先级越高)
1. location = # 精准匹配
2. location ^~ # 带参前缀匹配
3. location ~ # 正则匹配(区分大小写)
4. location ~* # 正则匹配(不区分大小写)
5. location /a # 普通前缀匹配,优先级低于带参数前缀匹配。
6. location / # 任何没有匹配成功的,都会匹配这里处
location = / {
# 只精准匹配 / 的查询.
[ configuration A ]
}
#匹配成功: /
location / {
# 匹配任何请求,因为所有请求都是以”/“开始
# 但是更长字符匹配或者正则表达式匹配会优先匹配
[ configuration B ]
}
#匹配成功:/index.html
location /documents {
# 匹配任何以 /documents/ 开头的地址,匹配符合以后,还要继续往下搜索/
# 只有后面的正则表达式没有匹配到时,这一条才会采用这一条/
[ configuration C ]
}
#匹配成功:/documents/document.html
#匹配成功:/documents/abc
location ~ /documents/ABC {
# 区分大小写的正则匹配
# 匹配任何以 /documents/ 开头的地址,匹配符合以后,还要继续往下搜索/
# 只有后面的正则表达式没有匹配到时,这一条才会采用这一条/
[ configuration CC ]
}
location ^~ /images/ {
# 匹配任何以 /images/ 开头的地址,匹配符合以后,立即停止往下搜索正则,采用这一条。/
[ configuration D ]
}
#成功匹配:/images/a.gif
location ~* .(gif|jpg|jpeg)$ {
# 匹配所有以 .gif、.jpg 或 .jpeg 结尾的请求,不区分大小写
# 然而,所有请求 /images/ 下的图片会被 [ config D ] 处理,因为 ^~ 到达不了这一条正则/
[ configuration E ]
}
#成功匹配:/documents/a.jpg