-
Notifications
You must be signed in to change notification settings - Fork 0
/
nginx
270 lines (235 loc) · 8.1 KB
/
nginx
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
反向代理:由代理者代替用户访问真实资源的过程
特点:
1.用户无需关心真实资源的位置
2.代理在内部有专门的配置,实现了路径的映射
Nginx(软件负载均衡器)是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器
三大运营商用硬件负载均衡器,F5服务器
如没买域名,就不能走dns域名解析服务器。改本地hosts文件,实现域名和本地ip的映射,走本机的nginx服务器
启动
start nginx
服务默认端口80
重启
nginx -s reload
关闭
nginx -s stop
--------------------------
nginx能直接代理端口,
改域名还得配合hosts文件,如添加
127.0.0.1 www.springboot02.com
127.0.0.1 == localhost == 本机域名
192.168.0.107 局域网下本机ip
192.168.0.101 局域网下服务器ip
nginx反向代理,结合hosts修改域名和端口
1.hosts添加dns重绑定操作
127.0.0.1 www.springboot02.com
2.webpack.devServer关闭host检查
webpack.devServer.disableHostCheck:true
3.nginx反向代理
http{
# 新版
server{
listen 80;#浏览器输入端口
server_name www.springboot02.com;#浏览器输入域名
# www.springboot02.com/请求映射为http://localhost:8080/
location / {
proxy_pass http://localhost:8080/; #前端页面地址
}
# www.springboot02.com/api/请求映射为http://192.168.0.107:84/
location /api/ {
proxy_pass http://192.168.0.107:84/; #后台接口地址
}
}
# 访问www.springboot02.com正常开发
# 旧版
server{
listen 85;#浏览器输入端口
server_name localhost;#浏览器输入域名
location / {
proxy_pass http://localhost:8080; #前端页面地址
proxy_redirect default;
}
location /api { #添加访问目录为/api的代理配置
rewrite ^/api/(.*)$ /$1 break;# 重写:将apis前缀后面的地址作为重写地址,达到去除前缀apis的目的
proxy_pass http://a.cloud.cn/api/; #后台接口地址
}
}
}
解释:
location 为本地域名如:localhost:8080
location /apis就重写为localhost:8080/apis/xxx 实则转发http://a.cloud.cn/api/xxx的接口地址
--------------------------
http {
# 配置一个代理服务
server {
# 监听的端口
listen 80;
# 监听的域名
server_name localhost;
location / {
# 文件目录
root html;
# 默认访问页面
index index.html;
}
}
}
--------------------------
nginx集群名字不能有"_"符号
upstream aa_bb {# 改为aaBb
}
--------------------------
查看nginx启动没
netstat -anptu | grep nginx
--------------------------
root和alias区别
server{
location /a {
root /usr/local/src/dist/;
alias /usr/local/src/dist/;
index index.html;
}
}
root:到root+location目录寻找资源,为/usr/local/src/dist/a不存在
alias:到alias定义的目录寻找资源,为/usr/local/src/dist存在,alias后要加"/"
--------------------------
nginx指定页面和vue路由的关系
nginx指定代理路径要与vue router页面路由相匹配
nginx:
server{
location / {
alias /usr/local/src/dist/;
}
}
vue:
router.path: '/'
nginx:
server{
location /a/a {
alias /usr/local/src/dist/;
}
}
vue:
router.path: '/a/a'
域名/a/a路径访问时,获取到vue /a/a的路由,页面文件是index.html会找资源文件,资源文件路径
publicPath:'./', //相对路径,相对index.html
assetsDir: './a/a/', //生成./a/a资源目录,index.html会去./a/a寻找资源
--------------------------
405 not allowed
没有请求到服务接口,请求到静态文件(比如页面)上去了,不允许静态文件响应post,所以返回405
一般是nginx映射匹配问题
------------------
nginx中的root, alias, index搭配使用规则
如:
前端项目包结构:
newPro:{
libs: [...第三方库],
skin: [css文件夹, js文件夹, imgs文件夹],
pages: [
a.html,
b.html,
index.html
]
}
nginx.conf:
# newPro项目
server{
listen 8888; # 浏览器输入端口
server_name localhost; # 浏览器输入域名
location /newPro { # 浏览器访问项目上下文,区分后可以同时访问多个项目
alias D:/desktop/newPro/; # root也好,alias也好,此处设置项目根路径,在项目根路径起服务。如果此处设置了内层文件,比如alias D:/desktop/newPro/pages/,项目里使用了相对路径的文件,可能会404报错,因为服务起在了内层,相对路径../往外找资源就找不到了
index pages/index.html; # 相对于项目的主页地址,访问时要完整加上
}
location /newPro-api {
proxy_pass http://ip:9001; #后台接口地址
}
# 上面项目在浏览器的访问地址,server_name + listen + location + index,也就是:http://ip:8888/newPro/pages/index.html,由于公司可能会做的限制,用localhost请求ip接口地址仍可能是跨域,所以前端用ip访问
# 下面可以同时映射另一个项目
location /bPro {
alias D:/desktop/bPro/;
index pages/index.html;
}
location /bPro-api {
proxy_pass http://ip:9002; #后台接口地址
}
# 浏览器访问路径是:http://ip:8888/bPro/pages/index.html
}
------------------
由于公司可能会做的限制
server{
listen 8888;#浏览器输入端口
server_name localhost;#浏览器输入域名
location /bPro {
alias D:/desktop/bPro/;
index pages/index.html;
}
location /bPro-api {
proxy_pass http://ip:9002; #后台接口地址
}
}
浏览器用ip访问,用localhost请求ip接口地址仍可能是跨域。
前端项目里请求后台接口时,直接用前端的域请求,如:http://ip:8888/bPro-api/...,会被proxy_pass代理到http://ip:9002/bPro-api/...,实现成功请求通。
------------------
前端,后端,sso登录,代理配置
前端访问nginx服务器地址:
if (process.env.VUE_APP_MODE === "test") {
serverUrl = "http://nginx_ip:nginx_port/";
apiurl = serverUrl + "regulatory-capital";
gateway = serverUrl + "gateway"
//基础路由前缀
baseHeaderUrl = "http://nginx_ip:nginx_port/"
ssoConfig = {
clientId: 'xx',
clientSecret: 'xx',
tokenUrl: 'http://nginx_ip:nginx_port/xx-sso/',
};
upload = "http://nginx_ip:nginx_port/xx-upload";
tpfOrgn = "http://nginx_ip:nginx_port/xx-orgn/orgn";
}
nginx服务器配置:
server{
listen nginx_port;
server_name localhost;
location / {
alias /xx/;
index index.html;
}
location /api {
proxy_pass http://backend_ip:backend_port;
}
location /xx-upload {
proxy_pass http://backend_ip:backend_port;
}
location /xx-orgn {
proxy_pass http://backend_ip:backend_port;
}
location /xx-sso {
proxy_pass http://backend_ip:backend_port;
}
}
------------------
vue history模式,nginx部署,页面刷新404
location / {
try_files $uri $uri/ /index.html;
}
------------------
nginx rewrite地址重写
server{
listen 8800;
server_name localhost;
location / {
alias /dist/; # 前端页面
index index.html;
try_files $uri $uri/ /index.html;
}
location /api {
rewrite "^/api/(.*)$" /$1 break; # 备注1
proxy_pass http://192.168.30.54:80; # 后台接口地址
}
}
备注1:
^/api/(.*)$:匹配路径的正则表达式,用了分组语法,把/api/以后的所有部分当做1组
/$1:重写的目标路径,这里用$1引用前面正则表达式匹配到分组1,即/api/后面的所有。这样新的路径就是除去/api/以外的所有,就达到了去除/api前缀的目的
break:指令,常用的有2个,分别是:last、break
last:重写路径结束后,将得到的路径重新进行一次路径匹配
break:重写路径结束后,不再重新匹配路径。
------------------