linux运维、架构之路-Nginx提高

一、虚拟主机搭建

1、基于域名的虚拟主机

[[email protected] html]# cat nginx.conf
worker_processes  1;
events {
    worker_connections  1024;
}
http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;
    server {
        listen       80;
        server_name  www.etiantian.org;
        location / {
            root   html/www;
            index  index.html index.htm;
        }
    }
    server {
        listen       80;
        server_name  bbs.etiantian.org;
        location / {
            root   html/bbs;
            index  index.html index.htm;
        }
    }
    server {
        listen       80;
        server_name  blog.etiantian.org;
        location / {
            root   html/blog;
            index  index.html index.htm;
        }
    }
}
说明:基于域名的虚拟主机,当输入IP地址访问的时候,默认寻找nginx.conf里配置的第一个虚拟主机,如果使用了include功能,则ll extra目录下显示的第一个文件为寻找的目标
[[email protected] conf]# ll extra/
-rw-r--r-- 1 root root 421 Sep 19 10:37 bbs.conf
-rw-r--r-- 1 root root 708 Sep 19 12:16 blog.conf
-rw-r--r-- 1 root root 388 Sep 19 10:10 www.conf

2、基于端口的虚拟主机

[[email protected] html]# cat nginx.conf
worker_processes  1;
events {
    worker_connections  1024;
}
http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;
    server {
        listen       80;
        server_name  www.etiantian.org;
        location / {
            root   html/www;
            index  index.html index.htm;
        }
    }
    server {
        listen       81;    ###←由基于域名bbs.etiantian.org的80改为基于端口的81
        server_name  bbs.etiantian.org;
        location / {
            root   html/bbs;
            index  index.html index.htm;
        }
    }
    server {
        listen       80;
        server_name  blog.etiantian.org;
        location / {
            root   html/blog;
            index  index.html index.htm;
        }
    }
}
测试:基于端口配置的虚拟主机成功:
访问过程:网络层(IP地址)====>传输层(端口)====>应用层(域名)

3、基于IP的虚拟主机

http {
              include       mime.types;
              default_type  application/octet-stream;
              sendfile        on;
              keepalive_timeout  65;
              server {
                      listen       10.0.0.8:80;#此处只改了域名bbs.etiantian.org
                      server_name  bbs.etiantian.org;##此处也可以改成对应IP 10.0.0.8
                      location / {
                          root   html/www;
                          index  index.html index.htm;
              }
        }
测试:基于IP配置的虚拟主机,修改完nginx配置文件,都要重新启动nginx服务

4、规范虚拟主机配置文件

cd /application/nginx/conf && mkdir extra
sed -n ‘10,17p‘ nginx.conf >./extra/www.conf
sed -n ‘18,25p‘ nginx.conf >./extra/blog.conf
sed -n ‘26,33p‘ nginx.conf >./extra/bbs.conf

5、精简Nginx主配置文件

cat nginx.conf
worker_processes  3;
events {
    worker_connections  1024;
}
http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;
    include extra/www.conf;
    include extra/bbs.conf;
    include extra/blog.conf;
}

二、Nginx日志

1、 错误日志

[[email protected] conf]# cat nginx.conf
worker_processes  3;
error_log logs/error.log error;##增加nginx错误日志模块即可
events {
    worker_connections  1024;
}
http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;
    include extra/www.conf;
    include extra/bbs.conf;
    include extra/blog.conf;
    include extra/status.conf;
}

2、访问日志

log_format  main  ‘$remote_addr - $remote_user [$time_local] "$request" ‘
                      ‘$status $body_bytes_sent "$http_referer" ‘
                      ‘"$http_user_agent" "$http_x_forwarded_for"‘;

access_log  logs/access.log  main;

日志格式详细说明

10.0.0.253 - - [16/Sep/2017:14:15:29 +0800] "GET / HTTP/1.1" 200 13 "-" "Mozilla/5.0 (Windows NT 6.1;

Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.79 Safari/537.36" "-"

$remote_addr    10.0.0.253                             #客户端IP地址信息
-                 -
$remote_user    -                                      #user name supplied with the Basic authentication
[16/Sep/2017:14:15:29 +0800] [$time_local]             #用户访问时间
"$request"      "GET / HTTP/1.1"                       #http请求报文中的请求行信息
$status         200                                    #服务端返回的状态码信息
$body_bytes_sent   13                                  #服务端返回给客户端的资源大小信息
"$http_referer"    -                                   #记录推荐链接过来的服务器地址信息(暂时忽略)
"$http_user_agent"  Chrome/61.0.3163.79 Safari/537.36  #客户端访问网站方式,利用的软件
"$http_x_forwarded_for"     "-"                        #忽略掉

3、日志切割(定时任务+脚本实现 )

[[email protected] scripts]# cat nginx_log_cut.sh
#!/bin/sh
cd /application/nginx/logs/
/bin/mv access.log access_$(date +%F).log
/application/nginx/sbin/nginx -s reload

三、Nginx状态模块http_stub_status_module

cat >>/application/nginx/conf/extra/status.conf<<EOF
server{
    listen  80;
    server_name  status.etiantian.org;
    location / {
      stub_status on;
      access_log   off;
    }
  }
EOF

做好本地hosts解析浏览器访问测试


参数信息


参数说明


Active connections


当前活动客户端连接数量包含Waiting连接数量


accepts


接收客户端连接的总数量


handled


处理连接的总数量


requests


客户端请求的总数


Reading


当前nginx正在读取请求头的连接数


Writing


当前nginx将响应写回客户机的连接数量


Waiting


当前空闲客户端连接等待请求的数量

四、Nginx location模块

1、语法location [=|~|~*|^~] /uri/ { … }


location


[=|~|~*|^~] /


uri


{…}


指令


匹配标识


匹配的网站网址


匹配URI后要执行的配置段

2、location匹配优先级


不用URI及特殊字符组合匹配顺序


匹配说明


1、“location = / {”


精确匹配


2、“location ^~/images/ {”


匹配常规字符串,不做正则匹配检查,优先匹配路径


3、“location ~*\.(gif|jpg|jpeg)$ {”


正则匹配


4、“location /documents/ {”


匹配常规字符串,如果有正则优先匹配正则


5、“location / {”


所有location都不能匹配后的默认匹配

测试location匹配优先级

server {
        listen       80;
        server_name  www.etiantian.org;
        root   html/www;
        location / {
           return 401;
        }
        location = / {
            return 402;
        }
        location /documents/ {
            return 403;
        }
        location ^~ /images/ {
            return 404;
        }
        location ~* \.(gif|jpg|jpeg)$ {
            return 500;
        }
        access_log logs/access_www.log main
    }
[[email protected] log]# curl -I -s -w "%{http_code}\n" -o /dev/null  www.etiantian.org
402
[[email protected] log]# curl -I -s -w "%{http_code}\n" -o /dev/null  www.etiantian.org/index.html
401
[[email protected] log]# curl -I -s -w "%{http_code}\n" -o /dev/null  www.etiantian.org/documents/
403
[[email protected] log]# curl -I -s -w "%{http_code}\n" -o /dev/null  www.etiantian.org/images/1.jpg
404
[[email protected] log]# curl -I -s -w "%{http_code}\n" -o /dev/null  www.etiantian.org/1.jpg
500

五、Nginx  http_rewrite_module模块

1、功能

rewrite的主要功能是实现网站URL地址重写,rewrite规则需要PCRE软件支持,通过Perl兼容表达式语法进行规则匹配,另一个功能就是实现伪静态。

2、实现301跳转

①种写法:通过if和rewrite结合来实现301跳转,避免无限跳转

server {
        listen       80;
        server_name  www.etiantian.org;
        location / {
            root   html/www;
            index  index.html index.htm;
            if ($host ~* "^etiantian.org$") {
            rewrite ^/(.*) http://www.etiantian.org/$1 permanent;
            }
        }
    }

②种写法增加一个server标签

server {
           listen       80;
           server_name etiantian.org;
           rewrite ^/(.*) http://www.etiantian.org/$1 permanent;
    } #在www.etiantian.org标签之上,增加一个server标签
    server {
        listen       80;
        server_name  www.etiantian.org;
        location / {
            root   html/www;
            index  index.html index.htm;
            }
    }

3、企业应用场景

①可以调整用户浏览URL,看起来更规范,合乎开发及产品人员的需求

②为了让搜索引擎收录网站内容及用户体验更好,企业会将动态URL地址伪装静态地址提供服务

③网站换新域名后,让旧域名的访问跳转到新的域名上,例如京东商城的www.360buy,改成jd.com

④根据特殊变更、目录、客户端的信息进行URL跳转等

六、 Nginx访问认证

1、修改配置文件

[[email protected] extra]# cat status.conf #以nginx状态虚拟主机为例配置
server{
    listen  80;
    server_name  status.etiantian.org;
    location / {
      stub_status on;
      access_log   off;
      auth_basic           "oldboy training";
      auth_basic_user_file   /application/nginx/conf/htpasswd;
    }
  }

2、创建密码认证文件并进行授权

yum install httpd-tools -y
htpasswd -bc /application/nginx/conf/htpasswd oldboy 123456
chmod 400 /application/nginx/conf/htpasswd
chown -R www.www /application/nginx/conf/htpasswd
浏览器输入地址测试status.etiantian.org

3、htpasswd命令总结


-c


创建一个新文件


-n


不更新文件,显示输出结果


-m


强制采用MD5加密密码


-d


强制采用CRYPT加密密码(默认)


-p


不加密密码(明文)


-s


强制采用SHA加密密码


-b


使用密码来自命令行,相当于交互方式


-D


删除指定用户

4、 企业需求案例

1、搭建好一台nginx的web服务器。配置好内网卡地址与外网卡地址

2、web服务的网站域名为www.etiantian.org,站点目录为html/www

3、要求内网用户可以访问网站http://www.etiantian.org/AV资源信息

4、要求外网用户禁止访问网站http://www.etiantian.org/AV资源信息

解决方案

①定位资源信息

uri== /AV

②进行策略控制

allow

deny

③修改配置文件

[[email protected] www]# cat /application/nginx/conf/extra/www.conf
    server {
        listen       80;
        server_name  www.etiantian.org;
        location / {
            root   html/www;
            index  index.html index.htm;
        }
        location /AV/ {
            root   html/www;
            index  index.html index.htm;
            allow  172.16.1.0/24;
            deny   all;
        }
   }

④创建测试资源信息

cd /application/nginx/html/www/
mkdir AV
echo oldboy_AV >AV/oldboy.html

⑤客户端进行测试

[[email protected] ~]# curl 10.0.0.8/AV/oldboy.html #模拟外网地址测试
<html>
<head><title>403 Forbidden</title></head>
<body bgcolor="white">
<center><h1>403 Forbidden</h1></center>
<hr><center>nginx/1.10.3</center>
</body>
</html>
[[email protected] ~]# curl 172.16.1.8/AV/oldboy.html #模拟内网地址测试
oldboy_AV
时间: 2024-10-13 00:11:28

linux运维、架构之路-Nginx提高的相关文章

《Linux运维架构师课程 - 门徒班》【招生中】

课程简介 阿良的课程内容主要以企业核心技术为讲解对象,避免过多在企业中很少用的技术,从而减少学习负担,这样就可以把精力主要花费在更重要的技术上, 而不像其他培训机构那样,讲很多高大上的技术名词,其中可能50%的知识在工作中都用不到,学员抓不住重点,时间长了就忘了.    所以,阿良的教学模式讲究是精益求精,"好钢用到刀刃上,只求精,不求多".    只要你肯学,阿良就肯教.帮助你掌握这门技能,成功就业,初学者月薪达到6000以上. 授课对象 ■ 计算机相关专业在校学生/应届生 ■ 网络

Linux运维架构师课程介绍

课程体系:     RHCE(RedHat Certification Engineer): RH033(基础) RH133(系统管理) RH253(服务管理)     RHCA(Redhat Centification Architect): RH401 RH423(LDAP协议) RH442         RH436(集群和存储) RHS333     MySQL     NoSQL 工作岗位: 系统架构师:设计蓝图 系统工程师:系统上线 运维工程师:系统运维 DBA:数据库管理员 计算机

Linux运维架构师学习开篇——笔记

从毕业从事硬件失效分析方面工作近三年, 偏冷门的行业,一直在工厂产线,吸着产品线散发出的一道道气息,闲暇之余我也在思考难道我今后只能在工厂待一辈子吗?我的职业只能在生产线处理不良产品,我的未来就是作为一个硬件高级维修工吗?我想走出产品线,对未来的职业发展充满迷茫,内心思想一直在挣扎.马上奔三后该做什么,能做什么? 以前接触过Linux,但仅仅是复制粘贴指令,配置IP,最基本操作而已,没有接触到真正的技术,为了今后能有一技之长,有个明确的发展方向(云端),也为了能拿到一份不错的薪水,提高生活质量,

Nginx 运维架构之(Nginx+PHP)

  1.首先我们来看下web服务器的排名情况 可以看到Nginx占有30.6%,Apache 52.0%,Nginx特点如下 1.配置简单,灵活,轻量. 2.高并发(静态小文件),静态几万的并发 3.占用资源少 4.功能种类比较多(web,cache,proxy),每一个功能都不是特别强 5.支持epoll模型,使得nginx可以支持高并发 Apache 选择 select模型 6.nginx可以搭配动态服务(FASTCGI接口) 6.利用nginx可以对ip限速,可以限制连接数 并发能力 ng

linux运维之路第一篇章:决心书

这一次很有毅力的选择了linux运维的这条路 为什么会这样选择? 自身往技术发展的需求! 身边朋友的推荐! 对在北京生活的一种追求! 来到北京很多人是想着挣钱的,我也是一样,在北京一家不知名的民办学校上了二年学,呵呵,就是野鸡大学,虽然学校对于教育放来来说不是怎么回事,但是对于技术方面还有两把刷子,可能自己对于网络有写喜欢,学了电子商务,工作之后做了SEO优化,到如今也有近两年的时间了.两年自己一直处在底薪阶层(3~6k),然而谁没有一个追求,展现自身更多的价值,拿更高的薪资,过上更好的生活,也

Nginx+Lua+Redis整合实现高性能API接口 - 网站服务器 - LinuxTone | 运维专家网论坛 - 最棒的Linux运维与开源架构技术交流社区! - Powered by Discuz!

Nginx+Lua+Redis整合实现高性能API接口 - 网站服务器 - LinuxTone | 运维专家网论坛 - 最棒的Linux运维与开源架构技术交流社区! - Powered by Discuz! log.latermoon.com/

如何迅速掌握并提高linux运维技能

之前曾经写过一篇如何学习Linux的文章,得到了很多反馈,大家都在分享自己的学习经验和体会,并且也提出了不少意见和建议.学习这个事情其实是说起来容易,做起来就很难,虽然给大家提高了很多学习linux的思路和方法,但是很多时候,学习的过程是个锻炼和总结的过程,需要自己去体会和领悟,而这个领悟跟钻研的深度有关,所以,对linux技术点钻研较深的朋友,可能收获的知识就多一些,提高也就快一些,而相反,不太喜欢钻研的朋友们,技能提高就稍微慢一点,因此,我们说虽然有了统一的学习方法,但是由于每个人的领悟力不

如何掌握并提高linux运维技能

初中级Linux运维人员们系统学习并迅速掌握Linux的运维实战技能.学习路线大纲如下: 入门基础篇 系统运维篇 Web运维篇 数据库运维篇 集群实战篇 运维监控篇 第一篇:Linux入门(安装.配置.shell命令)基础篇 一. 学习Linux的经验与技巧 1.1 Linux在各领域发展的现状和趋势 1.1.1 Linux与开源软件(Linux成就了开源) 1.1.2 Linux在服务器领域的发展(市场占有率95%,2015年数据) 1.1.3 Linux在桌面领域的发展 1.1.4 Linu

Linux运维需要懂什么web集群架构知识?

Linux运维需要懂什么web集群架构知识? 在充斥着各种的互联网+的数字时代,IT运维方面也越来越趋于Linux系统的应用,掌握 Linux 运维技术已成为IT 技术人员的必经之路,但是,构建在Linux系统上的高性能.高并发企业级网站集群架构上的网站集群架构,又会涉及到哪些具体的内容呢? 1.需要学习与Linux 相关的基础且重要的知识 Linux 的历史沿革.Linux 的企业级选型.学习环境的搭建.Linux 的企业级系统安装.Linux 系统的基础优化,以及远程连接Linux 及客户端