220608-Nginx重定向的两种配置方式

一段时间没有配置过nginx,果不其然之前学到的又还回去了,下面给出基于rewrite/alias的两种重定向配置方式

需求设置 /ximg 路径下的请求,访问 /home/yihui/html 下的html文件,应该怎么配置?

200727-线上故障实录-一大早服务就不可用了?

难得一个周末,一大早还没有睡醒就接到另外一个团队的电话,app打不开了,所有的数据都没有了,睡意全无,赶紧起来看能不能紧急抢救一下,最终发现是一个关键链路的nginx配置错误,导致nginx无法启动,接下来完整的记录下愉快的周末中,这个不愉快的早晨

200604 Nginx重写代理链接

本文参考自: 重写代理链接-url-rewrite

使用nginx做发现代理,遇到一个场景,匹配 /console/ 开头的域名,转发到目标端口号,但是希望转发过去的url,去掉 /console/ 这个头

针对这个,可以借助 rewrite + proxy_pass来实现

1
2
3
4
location /console {
rewrite ^/console/(.*) /$1 break;
proxy_pass http://127.0.0.1:8080/;
}

200515-nginx 提示文件访问权限问题failed(13:Permission denied)

nginx配置完毕之后,添加一个html页面,访问直接500错误,通过查看错误日志,显示 failed (13: Permission denied)

解决方法,修改配置文件中的userroot

1
2
3
4
vim /etc/nginx/nginx.conf

user root;
worker_processes auto;

修改完之后,重启即可

1
nginx -s reload

191122-nginx 开启gzip压缩配置

ngxin 开启gzip压缩,减少数据包大小,默认场景下nginx没有开启gzip压缩,需要主动指定

关键配置修改如下(进入配置文件 nginx.conf)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
http {
# ...

# 开启gzip压缩
gzip on;
# 表示当请求的资源超过1k时,才开启压缩
gzip_min_length 1k;
# 设置压缩所需要的缓冲区大小
gzip_buffers 4 16k;
# 针对的http版本
gzip_http_version 1.0;
# 压缩级别,级别越底压缩速度越快文件压缩比越小,反之速度越慢文件压缩比越大
gzip_comp_level 2;
# 支持压缩的资源类型,对于前后盾分离的项目而言,注意下json的压缩支持
gzip_types text/plain application/x-javascript text/css application/xml application/json text/javascript application/x-httpd-php image/jpeg image/gif image/png;
# 是否在http header中添加Vary: Accept-Encoding,建议开启
gzip_vary off;
# 禁用IE 6 gzip
gzip_disable "MSIE [1-6]\.";

}

修改完毕之后重启nginx即可

1
nginx -s reload

180602-nginx多域名配置

nginx多域名配置

原来的域名过期了,重新买了一个hhui.top,正好重新的配置一下,针对之前写过的几个不同的东西,通过不同的子域名来进行区分,因此简单记录一下nginx的多域名配置

I. 域名配置

1. 背景

因为资金有限,只有一台服务器,但是这个服务器上干的事情却不止一件,当前的状况是有下面几个

  • zweb : 一个多媒体工具网站,前端ReactJS写的,独立打包;后端为java部署在Tomcat中的应用media
  • mweb : 古诗词wap网,每天推荐12首经典古诗词;前端ReactJS编写,独立打包;后端Java部署在Tomcat中的应用Story
  • media:多媒体处理应用,Git开源,实现图片编辑, 二维码, markdown,svg渲染,html渲染,音频编辑等功能
  • Story: 古诗词的后端,提供古诗词查询,检索推荐和订阅等基本功能,未开源
  • 一灰灰Blog 基于Hexblog搭建的个人博客

所以这台服务器上,从应用角度出发,有五个不同的功能的服务,主要区分为两类:

  1. 静态的html前端页面
  2. 部署在Tomcat上的Java应用

2. 域名配置

五个服务,会配置五个不同的子域名:

  • 将前端静态页面,在服务器上放在不同的目录下,不通的域名,映射到不同的目录
  • Tomcat暴露8080端口,不同的应用放在webapps下不同的目录

a. 域名与文件映射

拿简单的 zweb 和 mweb 来设置,直接映射即可

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
server {
listen 443 ssl;
server_name zweb.hhui.top;

# https 证书配置
ssl_certificate zwebcert/1529370953598.pem;
ssl_certificate_key zwebcert/1529370953598.key;

ssl_session_cache shared:SSL:1m;
ssl_session_timeout 5m;

ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
# ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;

root /tmp/html/zweb;
}

server {
listen 443 ssl;
server_name mweb.hhui.top;

# https 证书配置
ssl_certificate zwebcert/1529370953598.pem;
ssl_certificate_key zwebcert/1529370953598.key;

ssl_session_cache shared:SSL:1m;
ssl_session_timeout 5m;

ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
# ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;

root /tmp/html/mweb;
}

简单来讲,一个子域名对应一个配置项,设置其中的server_name为目标域名

然后就是设置root,映射到不同的前端地址即可

b. 博客配置映射

个人博客虽然也是静态页面,但是不太一样的是博客的源码托管在git上,并借助了github的page服务,因此实际访问的域名会多一个后缀,如

1
https://liuyueyi.github.io/hexblog/

所以如果直接用上面的方法,会导致js和css文件404,主要是因为借助hexo搭建博客时,指定了path路径,所以要做一个简单的域名匹配

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
server {
listen 443 ssl;
server_name blog.hhui.top;

ssl_certificate blogcert/1529816324478.pem;
ssl_certificate_key blogcert/1529816324478.key;

ssl_session_cache shared:SSL:1m;
ssl_session_timeout 5m;

ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
# ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;

root /tmp/html/blog;

location = / {
index index.html;
rewrite ^(.*)$ /hexblog/ break;
}
location / {
root /tmp/html/blog;
}
}

上面的配置,相比较前面的,主要就是拦截了下默认的首页,强制跳转到指定的目录下

c. Tomcat代理

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
server {
listen 443 ssl;
server_name media.hhui.top;

ssl_certificate mediacert/1528000080078.pem;
ssl_certificate_key mediacert/1528000080078.key;

ssl_session_cache shared:SSL:1m;
ssl_session_timeout 5m;

ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
# ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;

root /tmp/html/media/;
location / {
proxy_pass http://media.hhui.top:8080/media/;
proxy_redirect default;
}
}

常见的代理转发配置了,nginx作为代理,将请求转发到Tomcat,也就那么一个简单的配置,主要利用的是 proxy_redirect

II. 小结

主要记录一个简单的配置,关于nginx详细的配置相关,之前写过一个博文,加上友情链接

上面配置体验:

III. 其他

一灰灰Bloghttps://liuyueyi.github.io/hexblog

一灰灰的个人博客,记录所有学习和工作中的博文,欢迎大家前去逛逛

声明

尽信书则不如,已上内容,纯属一家之言,因个人能力有限,难免有疏漏和错误之处,如发现bug或者有更好的建议,欢迎批评指正,不吝感激

扫描关注

QrCode

Nginx 路由转发配置笔记

Nginx 路由转发配置笔记

由于预算有限,只有一台服务器,想要玩的东西不少,所以这个台服务器上会提供多重服务,因此涉及到的nginx转发就必有重要了

由nginx做请求代理,提供多种服务

  1. php搭建的网站
  2. hexo创建的博客系统
  3. spring-boot & tomcat搭建的后台
  4. 静态网页

本片配置笔记中,主要集中以下几个内容

  • location的匹配规则是怎样的
  • 如何实现路由转发(反向代理)
  • 如何修改请求的路径(如请求的是 a/index.html 改为 a/public/index.html)
Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×