Nginx学习入门

Nginx让系统部署花样百出:
在系统部署时,遇到了一个需要多方考虑的安全问题,出于架构师老大的一句话,说先用Nginx做下代理(后来讨论,此方法治标不治本,就放弃了此方法,但是Nginx还是看了那么一会儿),菜鸟如我百度谷歌一番,稍微了解了一些Nginx的最基本用法。

Nginx简介

上面已经说了是大佬的一句话,其实在此之前我也使用过一些简单的反向代理,解决跨域问题(学的就是毛毛雨),在生产环境中还没真正使用过。那么老大说道了Nginx,那学习之前得了解Nginx是什么?能做什么,优势是什么?

是什么

是一个高性能的HTTP反向代理服务器,也是一个IMAP/POP3/SMTP服务器。

能做什么?

  • 反向代理
  • 正向代理
  • HTTP服务器
  • 负载均衡(什么鬼,,,)

优势有哪些?

  • 轻量web服务器
  • 适合做静态请求和反向(不适合做动态请求,动态用apache)
  • 抗高并发,nginx 处理请求异步非阻塞,使用较低的资源支持更高的并发数
  • 负载均衡

location配置

以下内容只讲了自己用到的,在讲解方面可能没有那么标准,差不多都是自己理解和实践的,希望能让大家更容易理解和使用吧!

基本语法:

1
2
3
location [=|~|~*|^~] /uri/ { 

}
  1. = 严格匹配。如果这个查询匹配,那么将停止搜索并立即处理此请求。
  2. ~ 为区分大小写匹配(可用正则表达式)
  3. !~为区分大小写不匹配
  4. ~* 为不区分大小写匹配(可用正则表达式)
  5. !~*为不区分大小写不匹配
  6. ^~ 如果把这个前缀用于一个常规字符串,那么告诉nginx 如果路径匹配那么不测试正则表达式。
1
2
3
4
location / {
root html;
index index.html index.htm;
}

使用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
2
3
location ^~ /layui {
root D:/ComSoftwares/nginx-1.13.7/html/;
}

访问localhost/alayuilocalhost/alayui/自动代理到D:/ComSoftwares/nginx-1.13.7/html/layui/目录下

1
2
3
location /alayui {
alias D:/ComSoftwares/nginx-1.13.7/html/layui/;
}

使用 = 匹配访问链接 只能匹配localhost/blayui或者localhost/blayui/,对于子目录无法进行访问
即对localhost/blayui/jie/add.html 无法进行访问
可以看出 = 是严格匹配

1
2
3
location = /blayui/ {
proxy_pass http://localhost/layui/;
}

三种方法的利弊:

  • 第一种和没设置一样( 为了学习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
2
3
4
location /apis {
rewrite ^/apis/(.*)$ /$1 break;
proxy_pass http://www.layui.com;
}

参考学习 http://blog.csdn.net/tjcyjd/article/details/50897959

总的来说,alias使用简单粗暴,转发本地目录;而正则表达式使用起来更爽,处理的情况更多,让更多事情变得简单,运行高效,低资源占用,代理强大的处理方法。

由于学习Nginx的时间有限,只针对自己遇到的问题进行了研究,如若有不对或不合适的地方,请批评指正,谢谢!
如果有不明白的,欢迎留言或者给我 发邮件[Send Email]


关注公众号

当前网速较慢或者你使用的浏览器不支持博客特定功能,请尝试刷新或换用Chrome、Firefox等现代浏览器