百万架构师系列文章阅读体验感更佳
原文链接:https://javaguide.net
公众号:不止极客
Nginx 的初步认识及设置
课程目标
- Nginx 在分布式架构中的应用分析
- 常用的 Web 服务器及差异
- Nginx 的安装以及设置分析
- Nginx 虚拟主机设置
- 详解 Location 的匹配规则
背景
早期用 F5 做负载均衡
后来通过负载均衡和热备来提高整个的 QPS。
什么是 Nginx
Nginx 是一个高性能的反向代理服务器
Apache、Tomcat、Nginx
都是 HTTP 服务器,他们都会放到我们服务端的服务器上,通过绑定 IP 和 端口的方式,去监听一个端口号。接收客户端的 HTTP 哀求。
展示给用户端。
JSP 是动态资源。
apache、nginx静态文件服务器css / jsTomcat动态文件服务器jsp / servletapache有一些性能瓶颈的Nginx主要是用来处理惩罚高并发的哀求Nginx 和 Apache 也是可以做动态解析的,但是它本身不是做这个的。
Nginx 功能
它照旧一个高度模块化的设计
安装 Nginx
http://nginx.org/download/
- [root@Darian1 software]# mkdir nginx
- [root@Darian1 software]# cd nginx-1.1.4/
- [root@Darian1 nginx-1.1.4]# ./configure --prefix=/software/nginx
- ./configure: error: the HTTP rewrite module requires the PCRE library.
- You can either disable the module by using --without-http_rewrite_module
- option, or install the PCRE library into the system, or build the PCRE library
- statically from the source with nginx by using --with-pcre=<path> option.
-
- [root@Darian1 nginx-1.1.4]# yum install pcre-devel
- [root@Darian1 nginx-1.1.4]# ./configure --prefix=/software/nginx
- ./configure: error: the HTTP gzip module requires the zlib library.
- You can either disable the module by using --without-http_gzip_module
- option, or install the zlib library into the system, or build the zlib library
- statically from the source with nginx by using --with-zlib=<path> option.
-
- [root@Darian3 nginx-1.4.1]# yum install -y zlib-devel
- [root@Darian1 nginx-1.1.4]# ./configure --prefix=/software/nginx
- [root@Darian1 nginx-1.1.4]# make && make install
- [root@Darian1 software]# cd nginx
- [root@Darian1 nginx]# ll
- 总用量 4
- drwxr-xr-x. 2 root root 4096 1月 17 13:58 conf
- drwxr-xr-x. 2 root root 68 1月 17 13:58 html
- drwxr-xr-x. 2 root root 6 1月 17 13:58 logs
- drwxr-xr-x. 2 root root 36 1月 17 13:59 sbin
- [root@Darian1 nginx]# cd sbin/
- [root@Darian1 sbin]# ll
- 总用量 1704
- -rwxr-xr-x. 1 root root 868424 1月 17 13:59 nginx
- -rwxr-xr-x. 1 root root 868424 1月 17 13:58 nginx.old
- [root@Darian1 sbin]# ./nginx
- [root@Darian1 sbin]# ./nginx -s stop
复制代码
- 下载 tar 包
- tar -zxvf nginx.tar.gz
- ./configure [--prefix]
- make && make install
启动和停止
nginx.conf
- [root@Darian1 nginx]# cd conf/
- [root@Darian1 conf]# ll
- 总用量 60
- -rw-r--r--. 1 root root 979 1月 17 13:58 fastcgi.conf
- -rw-r--r--. 1 root root 979 1月 17 13:59 fastcgi.conf.default
- -rw-r--r--. 1 root root 909 1月 17 13:58 fastcgi_params
- -rw-r--r--. 1 root root 909 1月 17 13:59 fastcgi_params.default
- -rw-r--r--. 1 root root 2837 1月 17 13:59 koi-utf
- -rw-r--r--. 1 root root 2223 1月 17 13:59 koi-win
- -rw-r--r--. 1 root root 3268 1月 17 13:58 mime.types
- -rw-r--r--. 1 root root 3268 1月 17 13:59 mime.types.default
- -rw-r--r--. 1 root root 2685 1月 17 13:58 nginx.conf
- -rw-r--r--. 1 root root 2685 1月 17 13:59 nginx.conf.default
- -rw-r--r--. 1 root root 544 1月 17 13:58 scgi_params
- -rw-r--r--. 1 root root 544 1月 17 13:59 scgi_params.default
- -rw-r--r--. 1 root root 570 1月 17 13:58 uwsgi_params
- -rw-r--r--. 1 root root 570 1月 17 13:59 uwsgi_params.default
- -rw-r--r--. 1 root root 3610 1月 17 13:59 win-utf
- [root@Darian1 conf]# vim nginx.conf
复制代码 Main
event
http
虚拟主机设置
针对不同的端口号做不同的访问,不同域名做不同的访问。- server {
- listen 80;
- server_name localhost;
- #charset koi8-r;
- #access_log logs/host.access.log main;
- location / {
- root html;
- index index.html index.htm;
- }
- }
复制代码 基于ip的虚拟主机
不演示
基于端口号的虚拟主机
- server {
- listen 8080;
- server_name localhost;
- location / {
- root html;
- index index.html;
- }
- }
复制代码 我们可以设置一个端口段,去做不同的路由转发。
基于域名的虚拟主机
购买主域名以后,可以基于主域名开放很多二级域名。
www.darian.com / ask.darian.com / git.darian.com / bbs.darian.com- server{
- listen 8080;
- server_name localhost;
- location / {
- root html;
- index index.html;
- }
- }
- server{
- listen 80;
- server_name bbs.darian.com;
- location / {
- root html;
- index bbs.html;
- }
- }
- server{
- listen 80;
- server_name ask.darian.com;
- location / {
- root html;
- index ask.html;
- }
- }
- server{
- listen 80;
- server_name www.darian.com;
- location / {
- # 去这个目录下边找
- root html;
- index index.html;
- }
- }
复制代码- [root@Darian1 nginx]# ./sbin/nginx
- [root@Darian1 nginx]# ./sbin/nginx -s reload
- [root@Darian1 nginx]# ps -ef|grep nginx
- root 9595 1 0 15:16 ? 00:00:00 nginx: master process ./sbin/nginx
- nobody 9596 9595 0 15:16 ? 00:00:00 nginx: worker process
- root 9619 9550 0 15:28 pts/2 00:00:00 grep --color=auto nginx
复制代码 必要去 html 目录下创建几个文件- [root@Darian1 html]# ll
- 总用量 24
- -rw-r--r--. 1 root root 383 1月 17 13:58 50x.html
- -rw-r--r--. 1 root root 26 1月 17 16:13 ask.html
- -rw-r--r--. 1 root root 25 1月 17 16:14 bbs.html
- -rw-r--r--. 1 root root 151 1月 17 13:58 index.html
- -rw-r--r--. 1 root root 7133 1月 17 13:58 ngx_core_module.html
复制代码 可能必要刷新 DNS
用本地 host 实现了域名的解析。
二级域名随意创造,存案主域名就好了
建议
将设置单独抽出来,放到一个地方去同一地进行管理。
代理办理的事变
- 负载均衡
- 缓存
- 限流
- 表里网的隔离,做安全性的东西
location
nginx 里边,必要知道 location ,对 location 做一些哀求的转发。
根据哀求的 URI 匹配到对应的 location 以后,去做对应的转发。
设置语法
- location [= | ~* | ^~ ] /uri/ {...}
复制代码 设置规则
- location = /uri 精准匹配
- location ^~ /uri 前缀匹配
- location ~ /uri
- location / 通用匹配
复制代码 规则的优先级
- 1 location = /
- 2 location = /index
- 3 location ^~ /article/
- 4 location ^~ /article/files/
- 5 location ~ \.(gif|png|js|css)$
- 6 location /
-
- http://192.168.11.154/ -> 1
- http://192.168.11.154/index ->2
- http://192.168.11.154/article/files/1.txt ->4
- http://192.168.11.154/darian.png ->5
复制代码(静态资源服务器,可以做压缩的)
匹配规则是不能重复的。
- 精准匹配是优先级最高
- 普通匹配(最长的匹配)
- 正则匹配
现实利用建议
- # 根目录的配置规则,首页是静态页面
- location =/ {
- }
- # 通用匹配 http://192.168.40.128:8080/index.html
- location / {
- }
- # 静态规则,做动静分离
- location ~* \.(gif|....)${
- }
复制代码 Nginx模块
Nginx 内部都是由一些核心和非核心的第三方模块组成的。它的模块化,我们可以做一些动态的集成和扩展。
除了它本身的功能以外,我们还可以利用第三方的设置去实现更复杂的功能。
默认的:
模块分类
- 核心模块 ngx_http_core_module
- 尺度模块 http模块
- 第三方模块
可以把 模块当作插件
ngx_http_core_module
- server{
- listen port
- server_name ...
- localtion{
- root ...
- }
- }
复制代码 Location 实现 URI 到文件系统路径的映射
- error_page
- # redirect server error pages to the static page /50x.html
- #
- error_page 500 502 503 504 /50x.html;
- location = /50x.html {
- root html;
- }
复制代码 ngx_http_access_module
实现基于 IP 的访问控制功能
- allow address | CIDR | unix: | all;
- deny address | CIDR | unix: | all;
自上而下查抄,一旦匹配,将生效,条件严格的置前
可以用 -t 来看语法有没有问题- [root@Darian1 sbin]# ./nginx -t
复制代码 如何添加第三方模块
Nginx 不支持动态去安装或者加载模块。安装别的代码的时间必要重新编译。(我们很少去编写模块)
- 原来所安装的设置,你必须在重新安装新模块的时间,加上
- 不能直接 make install
- configure --prefix=/data/program/nginx
复制代码 安装方法
- ./configure --prefix=/安装目录 --add-module = /第三方模块的目录
- ./configure --prefix=/data/program/nginx --with-http_stub_status_module --with-http_random_index_module
- cp objs/nginx $nginx_home/sbin/nginx
复制代码- [root@Darian1 nginx-1.1.4]# cd ../nginx-1.1.4/
-
- [root@Darian1 nginx-1.1.4]# ./configure --prefix=/software/nginx --with-http_stub_status_module --with-http_random_index_module
- [root@Darian1 nginx-1.1.4]# ps -ef|grep nginx
- root 9595 1 0 15:16 ? 00:00:00 nginx: master process ./sbin/nginx
- nobody 9755 9595 0 16:25 ? 00:00:00 nginx: worker process
- root 13696 9550 0 19:35 pts/2 00:00:00 grep --color=auto nginx
- [root@Darian1 nginx-1.1.4]# kill -9 9595
- [root@Darian1 nginx-1.1.4]# kill -9 9755
- [root@Darian1 nginx-1.1.4]# ps -ef|grep nginx
- root 13699 9550 0 19:35 pts/2 00:00:00 grep --color=auto nginx
- [root@Darian1 nginx-1.1.4]# cp objs/nginx ../nginx/sbin/nginx
- cp:是否覆盖"../nginx/sbin/nginx"? y
- [root@Darian1 nginx-1.1.4]#
复制代码 如果直接 make && make install 会直接就没了。
以是 更换。- [root@Darian1 nginx-1.1.4]# kill -9 13713
- [root@Darian1 nginx-1.1.4]# ./configure --prefix=/software/nginx --with-http_stub_status_module --with-http_random_index_module
- [root@Darian1 nginx-1.1.4]# make
- [root@Darian1 nginx-1.1.4]# cp objs/nginx ../nginx/sbin/nginx
- cp:是否覆盖"../nginx/sbin/nginx"? y
复制代码 http_stub_status_module
- location /status{
- stub_status on;
- }
复制代码
- Active connections:当前状态,活动状态的连接数
- accepts:统计总值,已经接收的客户端哀求的总数
- handled:统计总值,已经处理惩罚完成的客户端哀求的总数
- requests:统计总值,客户端发来的总的哀求数
- Reading:当前状态,正在读取客户端哀求报文首部的连接的连接数
- Writing:当前状态,正在向客户端发送响应报文过程中的连接数
- Waiting:当前状态,正在等待客户端发出哀求的空闲连接数
http_random_index_module
www.darian.com
随机显示主页
一般情况下,一个站点默认首页都是定义好的 index.html 、 index.shtml 等等,如果站点下有很多页面想随机展示给用户浏览,那得步伐上实现,很麻烦,利用 nginx 的 random index 即可简朴实现这个功能,凡是以/结尾的哀求,都会随机展示当前目录下的文件作为首页
- 添加 random_index on 设置,默认是关闭的
- location / {
- root html;
- random_index on;
- index index.html index.htm;
- }
复制代码 - 在 html 目录下创建多个 html 页面
他就会多个 HTML 页面随机地展示在首页。
( 官方的模块,你可以直接通过 with model 去集成,如果是下载第三方插件可以通过 http model 去集成。 )
百万架构师系列文章阅读体验感更佳
原文链接:https://javaguide.net
公众号:不止极客
泉源于: https://javaguide.net
微信公众号:不止极客
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |