Nginx学习入门
Nginx让系统部署花样百出:
在系统部署时,遇到了一个需要多方考虑的安全问题,出于架构师老大的一句话,说先用Nginx做下代理(后来讨论,此方法治标不治本,就放弃了此方法,但是Nginx还是看了那么一会儿),菜鸟如我百度谷歌一番,稍微了解了一些Nginx的最基本用法。
Nginx简介
上面已经说了是大佬的一句话,其实在此之前我也使用过一些简单的反向代理,解决跨域问题(学的就是毛毛雨),在生产环境中还没真正使用过。那么老大说道了Nginx,那学习之前得了解Nginx是什么?能做什么,优势是什么?
是什么
是一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP服务器。
能做什么?
- 反向代理
- 正向代理
- HTTP服务器
- 负载均衡(什么鬼,,,)
优势有哪些?
- 轻量web服务器
- 适合做静态请求和反向(不适合做动态请求,动态用apache)
- 抗高并发,nginx 处理请求异步非阻塞,使用较低的资源支持更高的并发数
- 负载均衡
location配置
以下内容只讲了自己用到的,在讲解方面可能没有那么标准,差不多都是自己理解和实践的,希望能让大家更容易理解和使用吧!
基本语法:
1 | location [=|~|~*|^~] /uri/ { |
- = 严格匹配。如果这个查询匹配,那么将停止搜索并立即处理此请求。
- ~ 为区分大小写匹配(可用正则表达式)
- !~为区分大小写不匹配
- ~* 为不区分大小写匹配(可用正则表达式)
- !~*为不区分大小写不匹配
- ^~ 如果把这个前缀用于一个常规字符串,那么告诉nginx 如果路径匹配那么不测试正则表达式。
1 | location / { |
使用root、alias和proxy_pass
由于最近在看layui的一些东西(不是广告),就顺手拿来做个演示!(以下提到的layui,指的是layui官方提供社区模板的html目录。
阅读到这时,如果你还没有nginx环境,请点击下载搭建你的环境,
- 点击Nginx官网,点击最新带有
mainline version
字样的链接,建议下载Stable version
版本; - 下载得到一个zip包,解压到你想放置的目录,双击启动
nginx.exe
另外再说明一下实践的环境,本地解析使用的80端口,反向代理转发的url不带端口
以下代码均在
nginx/conf/
文件夹下的nginx.conf
文件中修改在修改保存
nginx.conf
后,记得使用nginx -s reload
重载配置文件,使其生效
使用alias 设置本地虚拟目录,后面必须加上 / ,alias 指定本地目录,例如Windows系统上设置为 D:/html/app/
,若是使用mac或linux,路径最后也要加上 / ,例如 ~/html/app/
or /home/bruce/html/app/
。
以下两个方法都能跳转到layui中,这个相当于直接访问 D:/ComSoftwares/nginx-1.13.7/html/layui
目录,可以理解为在root目录下,访问layui目录:
1 | location ^~ /layui { |
访问localhost/alayui
或localhost/alayui/
自动代理到D:/ComSoftwares/nginx-1.13.7/html/layui/
目录下
1 | location /alayui { |
使用 =
匹配访问链接 只能匹配localhost/blayui
或者localhost/blayui/
,对于子目录无法进行访问
即对localhost/blayui/jie/add.html
无法进行访问
可以看出 = 是严格匹配
1 | location = /blayui/ { |
三种方法的利弊:
- 第一种和没设置一样( 为了学习root)
- 第二种根据访问的链接,去代理到一定的目录下,即代理了当前链接,又代理了子目录
- 第三种只严格匹配了当前链接,对于子目录无法进行访问
推荐使用第二种:alias方法
使用rewrite、proxy_pass和正则表达式
下面的方法统一使用了正则表达式来解决访问链接
添加访问目录为/apis
的代理配置,用127.0.0.1:80/apis
重定向http://www.layui.com,
在ajax中访问/apis/demo/table/user
,相当于访问http://www.layui.com/demo/table/user
1 | location /apis { |
总的来说,alias使用简单粗暴,转发本地目录;而正则表达式使用起来更爽,处理的情况更多,让更多事情变得简单,运行高效,低资源占用,代理强大的处理方法。
由于学习Nginx的时间有限,只针对自己遇到的问题进行了研究,如若有不对或不合适的地方,请批评指正,谢谢!
如果有不明白的,欢迎留言或者给我 发邮件[Send Email]