一、搭建Nginx服务器

目标:

在IP地址为192.168.4.5的主机上安装部署Nginx服务,并可以将Nginx服务器,要求编译时启用如下功能:

1> SSL加密功能

2> 设置Nginx账户及组名称均为nginx

可选项:Nginx服务器升级到更高版本。然后客户端访问页面验证Nginx Web服务器:

1> 使用火狐浏览器访问

2> 使用curl访问

方案:

使用2台RHEL6虚拟机,其中一台作为Nginx服务器(192.168.4.5)、另外一台作为测试用的Linux客户机(192.168.4.100),如下图:

安装nginx-1.8.0版本时,需要使用如下参数:

1> with-http_ssl_module:提供SSL加密功能

2> user:指定账户      #安装源码包时,为了安全都会创建一个普通用户,即使软件被黑,也只是获得一个普通用户权限

3> group:指定组

步骤:

步骤一:构建Nginx服务器

1)使用源码包安装nginx软件包

在Proxy主机安装Nginx   #Proxy主机为服务器端

将lnmp_soft-2017-03-28.tar.gz包解压,解压位置可以随意,解压后会出现目录lnmp_soft

#cd lnmp_soft

#./install_lnmp.sh    #运行这个脚本进入交互界面

##############----Menu----##############

# 1. 安装Nginx

# 2. 安装MariaDB

# 3. 安装PHP

# 4. 安装Memcached

# 5. 安装memcache for php

# 6. 安装Java,Tomcat

# 7. 安装Varnish

# 8. 安装Session共享库

# 9. 退出程序

########################################

请选择一个菜单[1-9]:1     #交互界面,选1 然后回车,自动安装Nginx

# useradd -s /sbin/nologin nginx  #创建一个普通用户禁止登录,安全

# ls       #查看lnmp_soft目录下,默认是没有nginx-1.8.0目录的

# tar -xf nginx-1.8.0.tar.gz

# ls       #查看lnmp_soft目录下,有了nginx-1.8.0目录

# cd nginx-1.8.0/

# ./configure --user=nginx    #配置到nginx普通用户下,被黑了后获得只是普通用户nginx权限,不是root权限

# make      #编译

# make install   #安装

# make&&make install    上面两条命令可以写到一起

2)nginx命令的用法

# /usr/local/nginx/sbin/nginx    #启动服务

# /usr/local/nginx/sbin/nginx -s stop   #关闭服务

# /usr/local/nginx/sbin/nginx -s reload   #重新加载配置文件

# /usr/local/nginx/sbin/nginx -V    #查看安装的nginx软件信息,包括安装了那些模块

# netstat -antpu |grep 80    #nginx默认是通过TCP 80端口监听客户端请求,这个可以查看Nginx服务状态是否开启

3)为Nginx Web服务器建立测试首页文件

Nginx Web服务默认首页文档存储目录为/usr/local/nginx/html/,在此目录下建立一个名为index.html的文件:

# echo "I am a test web" > /usr/local/nginx/html/index.html    #随便写一个测试页面,方便验证Nginx服务状态

步骤二:升级Nginx服务器

1)编译新版本nginx软件

# tar -xf nginx-1.8.0.tar.gz    #理论上这里是nginx-1.9.0.tar.gz版本升级的,这里将1.9.0里需要用到的模块已经压缩到1.8.0里面了,默认未安装,需要手动安装升级

# cd nginx-1.8.0/

# ./configure --help    #这个命令可以帮助查看要安装的模块命令

# ./configure --with-http_ssl_module   #此次升级需要安装这个模块,后面做安全的https访问时,加密访问需要这个模块的支持

# ls  objs/     #配置后的文件都在该目录下

autoconf.err  Makefile  ngx_auto_config.h  ngx_auto_headers.h  ngx_modules.c  src

# make      #编译

2) 备份老的nginx主程序,并使用编译好的新版本nginx替换老版本

# ls  objs/    #编译后的文件也在该目录下

autoconf.err  Makefile  nginx  nginx.8  ngx_auto_config.h  ngx_auto_headers.h  ngx_modules.c  ngx_modules.o  src    #蓝色文件为编译后多出来的文件

# cp -r nginx /usr/local/nginx/sbin/    #这里只将文件nginx拷贝到/usr/local/nginx/sbin/下,会将新的模块内容加进去而不会影响原有的日志和网页

如果上面命令是make install命令则会将原有的日志和网页文件都覆盖掉,这里增加模块不是新建Nginx服务,make install命令本质上也是cp命令

注意:升级不需要make install

#ls nginx /usr/local/nginx/sbin    #升级后会把原有的nginx变成nginx.old,新的会替换它

nginx  nginx.old

步骤三:客户端访问测试

1)分别使用浏览器和命令行工具curl测试服务器页面

# firefox http://192.168.4.5

# curl  http://192.168.4.5

二、用户认证

目标:

沿用练习一,通过调整Nginx服务端配置,实现以下目标:

1> 访问Web页面需要进行用户认证

2> 用户名为:tom,密码为:12345

方案:

通过Nginx实现Web页面的认证,需要修改Nginx配置文件,在配置文件中添加auth语句实现用户认证。最后使用htpasswd命令创建用户及密码即可。

步骤:

步骤一:修改Nginx配置文件

1)修改/usr/local/nginx/conf/nginx.conf

# vim /usr/local/nginx/conf/nginx.conf     #添加蓝的部分的为认证文件配置

17 http {
35     server {
36         listen       80;
37         server_name  localhost;
添加两句话:
38     auth_basic "Input Password:";         #这里“”内是提示语可以随便写,没有实际功能
39     auth_basic_user_file "/usr/local/nginx/passwd";    #认证密码文件存放位置
44             root   html;
46         }
55         }

2)生成密码文件,创建用户及密码

使用htpasswd命令创建账户文件,需要确保系统中已经安装了httpd-tools。

# yum -y install httpd-tools    #安装加密输入工具,用来输入密码不显示为明文

# htpasswd -c /usr/local/nginx/passwd tom   #密码是加密的,输入密码不显示

# htpasswd  /usr/local/nginx/passwd jerry   #添加用户时,不要加-c,c代表创建文件,加上后会把之前的用户覆盖掉

New password:

Re-type new password:

Adding password for user tom

补充:

apache htpasswd命令选项参数说明

-c  创建一个加密文件

-n  不更新加密文件,只将apache htpasswd命令加密后的用户名密码显示在屏幕上

-m  默认apache htpassswd命令采用MD5算法对密码进行加密

-d  apache htpassswd命令采用CRYPT算法对密码进行加密

-p  apache htpassswd命令不对密码进行进行加密,即明文密码

-s  apache htpassswd命令采用SHA算法对密码进行加密

-b  在apache htpassswd命令行中一并输入用户名和密码而不是根据提示输入密码

-D  删除指定的用户

在Windows, NetWare and TPF 系统中 ‘-m’选项是默认的,在使用apache htpasswd命令时可以忽略。在其他系统中,’-p’选项可能不能工作。

3)重启Nginx服务

# /usr/local/nginx/sbin/nginx -s reload     #不关闭服务,重新读一遍配置文件,配置文件生效,要保证nginx是启动状态,否则报错

步骤二:客户端测试

1)登录192.168.4.100客户端主机进行测试

# firefox https://192.168.4.5     #输入用户名密码才可以访问

三、基于域名的虚拟主机

目标:

沿用练习二,配置基于域名的虚拟主机,实现以下目标:

1> 实现两个基于域名的虚拟主机,域名分别为www.aa.com和www.bb.com

2> 对域名为www.aa.com的站点进行用户认证,用户名称为tom,密码为123456

方案:

修改Nginx配置文件,添加server容器实现虚拟主机功能;对于需要进行用户认证的虚拟主机添加auth认证语句。

步骤:

步骤一:修改配置文件

1)修改Nginx服务配置,添加相关虚拟主机配置如下

86    server {
 87        listen       80;      #客户端访问端口号
 88        server_name www.b.com;    #服务器显示的域名
 89
 90        location / {
 91            root   web;          # www.b.com页面的存储位置,是一个相对路径,nginx安装在哪里,这个web目录就创建在该nginx目录的下面
 92            index  index.html index.htm;
 93        }
 94    }

拓展:

1、基于域名的虚拟主机

类比与虚拟Web主机:一台服务器,一个httpd软件,【多个网站】;门户网站【宣传】;论坛网站【反馈信息】

<Virtualhost *:80>

servername www.a.com

</Virtualhost>

<Virtualhost *:80>

servername www.b.com

</Virtualhost>

服务器192.168.4.5【www.a.com、www.b.com】

客户端【DNS】

www.a.com

www.b.com

这里实现同样功能的操作:

客户端【/etc/hosts】  #本地域名解析文件,注意是位与客户端上面

/etc/hosts的优先级比DNS高,设置了相同域名解析的/etc/hosts和DNS,DNS会不起作用

IP    www.a.com

IP    www.b.com

1.1.1.1  www.baidu.com

# vim /usr/local/nginx/conf/nginx.conf

37         server_name  www.a.com;    #修改显示的域名,页面为默认页面

ctrl + v 变成可视块,移动光标,x删除选中的内容

改动端口号、域名、页面存储位置

86    server {
 87        listen       80;      #客户端访问端口号
 88        server_name www.b.com;    #服务器显示的域名
 89
 90        location / {
 91            root   web;          # www.b.com页面的存储位置,是一个相对路径,nginx安装在哪里,这个web目录就创建在该nginx目录的下面
 92            index  index.html index.htm;
 93        }
 94    }

# mkdir /usr/local/nginx/web  创建www.b.com的网页目录

/etc/hosts设置了本地域名解析  客户端访问该页面时,如果用IP访问的话,会显示服务端配置的相同IP的第一个servername

2、基于端口的虚拟主机
 86    server {
 87        listen       8080;   #端口号
 88        server_name www.b.com;
 89
 90        location / {
 91            root   web;
 92            index  index.html index.htm;
 93        }
 94    }

3、基于IP的虚拟主机
 86    server {
 87        listen       *:80;      #不写*:默认就是所有IP都可以,也可以写4.5:80  IP4.5的访问..
 88        server_name www.b.com;
 89
 90        location / {
 91            root   web;
 92            index  index.html index.htm;
 93        }
 94    }

2)创建账户及密码

# htpasswd -c /usr/local/nginx/passwd tom

New password:

Re-type new password:

Adding password for user tom

3)创建网站根目录及对应首页文件

# mkdir /usr/local/nginx/web  创建www.b.com的网页目录

# echo "I am another test web" > /usr/local/nginx/web/index.html    创建一个页面

4)重启nginx服务

# /usr/local/nginx/sbin/nginx -s reload

步骤二:客户端测试

1)修改客户端主机192.168.4.100的/etc/hosts文件,进行域名解析

[root@client ~]# vim /etc/hosts

192.168.4.5    www.a.com www.b.com

)登录192.168.4.100客户端主机进行测试

注意:SSH –X远程连接调用虚拟机的firefox时,请先关闭真实机的firefox。

[root@client ~]# firefox http://www.aa.com            //输入密码后可以访问

[root@client ~]# firefox http://www.bb.com            //直接访问

四、SSL虚拟主机

目标:

沿用练习二,配置基于加密网站的虚拟主机,实现以下目标:

1> 域名为www.c.com

2> 该站点通过https访问

3> 通过私钥、证书对该站点所有数据加密

方案:

源码安装Nginx时必须使用--with-http_ssl_module参数,启用加密模块,对于需要进行SSL加密处理的站点添加ssl相关指令(设置网站需要的私钥和证书)。

步骤:

步骤一:配置SSL虚拟主机

1)生成私钥与证书

[root@svr5 ~]# cd /usr/local/nginx/conf

[root@svr5 ~]# openssl genrsa -out cert.key                            //生成私钥

[root@svr5 ~]# openssl req -new -x509 -key cert.key -out cert.pem      //生成证书问

2)修改Nginx配置文件,设置加密网站的虚拟主机

[root@svr5 ~]# vim  /usr/local/nginx/conf/nginx.conf

… …

server {

listen       443 ssl;

server_name  www.c.com;

ssl_certificate      cert.pem;

ssl_certificate_key  cert.key;

ssl_session_cache    shared:SSL:1m;

ssl_session_timeout  5m;

ssl_ciphers  HIGH:!aNULL:!MD5;

ssl_prefer_server_ciphers  on;

location / {

root   html;

index  index.html index.htm;

}

}

步骤二:客户端验证

1)修改客户端主机192.168.4.100的/etc/hosts文件,进行域名解析

[root@client ~]# vim /etc/hosts

192.168.4.5    www.c.com  www.a.com   www.b.com

2)登录192.168.4.100客户端主机进行测试

[root@client ~]# firefox https://www.cc.com            //信任证书后可以访问

五、Nginx反向代理

目标:

使用Nginx实现Web反向代理功能,实现如下功能:

1> 后端Web服务器两台,可以使用httpd实现

2> Nginx采用轮询的方式调用后端Web服务器

3> 两台Web服务器的权重要求设置为不同的值

4> 最大失败次数为1,失败超时时间为30秒

方案:

使用4台RHEL7虚拟机,其中一台作为Nginx代理服务器,该服务器需要配置两块网卡,IP地址分别为192.168.4.5和192.168.2.5,两台Web服务器IP地址分别为192.168.2.100和192.168.2.200。客户端测试主机IP地址为192.168.4.100。如下图所示。

步骤:

步骤一:部署实施后端Web服务器

1)部署后端Web1服务器

后端Web服务器可以简单使用yum方式安装httpd实现Web服务,为了可以看出后端服务器的不同,可以将两台后端服务器的首页文档内容设置为不同的内容。

[root@web1 ~]# yum  -y  install  httpd

[root@web1 ~]# echo "192.168.2.100" > /var/www/html/index.html

[root@web1 ~]# systemctl restart httpd

2)部署后端Web2服务器

[root@web2 ~]# yum  -y  install  httpd

[root@web2 ~]# echo "192.168.2.200" > /var/www/html/index.html

[root@web2 ~]# systemctl restart httpd

步骤二:配置Nginx服务器,添加服务器池,实现反向代理功能

1)修改/usr/local/nginx/conf/nginx.conf配置文件

[root@svr5 ~]# vim /usr/local/nginx/conf/nginx.conf

.. ..

http {

.. ..

upstream webserver {

server 192.168.2.100 weight=1 max_fails=2 fail_timeout=10;

server 192.168.2.200 weight=2 max_fails=2 fail_timeout=10;

}

.. ..

server {

listen        80;

server_name  www.tarena.com;

location / {

proxy_pass http://webserver;

}

}

2)重启nginx服务

[root@svr5 ~]# /usr/local/nginx/sbin/nginx –s reload

3)使用浏览器访问代理服务器测试轮询效果

[root@client ~]# curl http://192.168.4.5            //使用该命令多次访问查看效果

步骤二:配置upstream服务器集群池属性

1)设置失败次数,超时时间,权重

[root@svr5 ~]# vim /usr/local/nginx/conf/nginx.conf

.. ..
    http {
    .. ..
    upstream webserver {
                    server 192.168.2.100 weight=1 max_fails=2 fail_timeout=10;  #weight=1表示轮询时转发一次, max_fails=2 连接失败后允许连接第二次,fail_timeout=10表示失败后10秒内不再访问该web服务器
                    server 192.168.2.200 weight=2 max_fails=3 fail_timeout=20;  #weight=2表示轮询时转发二次, max_fails=3 两次失败后允许连接第三次,fail_timeout=20表示失败后20秒内不再访问该web服务器

#server 192.168.2.300 weight=1 max_fails=2 fail_timeout=10  down;    #如果发现该服务器坏掉了,可以在后面加down,也可以在前面加#,注释掉这条命令,这样该web就不再参与集群,不再参与轮询,直到该web被修好,去掉down或者掉#,继续正常工作
            }
    .. ..
    server {
            listen        80;
            server_name  www.tarena.com;
                location / {
                proxy_pass http://webserver;
            }
    }

2)重启nginx服务

[root@svr5 ~]# /usr/local/nginx/sbin/nginx –s reload

3)使用浏览器访问代理服务器测试轮询效果  #nginx默认的算法时轮询

[root@client ~]# curl http://192.168.4.5            //使用该命令多次访问查看效果

4)设置相同客户端访问相同Web服务器

[root@svr5 ~]# vim /usr/local/nginx/conf/nginx.conf
    .. ..
    http {
    .. ..
    upstream webserver {
                     ip_hash;     #加了该参数后,相同的客户端只会访问相同的web
                    server 192.168.2.100 weight=1 max_fails=2 fail_timeout=10;
                    server 192.168.2.200 weight=2 max_fails=2 fail_timeout=10;
            }
    .. ..
    server {
            listen        80;
            server_name  www.tarena.com;
                location / {
                proxy_pass http://webserver;
            }
    }

5)重启nginx服务

[root@svr5 ~]# /usr/local/nginx/sbin/nginx –s reload

6)使用浏览器访问代理服务器测试轮询效果

[root@client ~]# curl http://192.168.4.5            //使用该命令多次访问查看效果

高级运维(二):搭建Nginx服务器、用户认证、基于域名的虚拟主机、SSL虚拟主机、Nginx反向代理的更多相关文章

  1. nginx 配置用户认证

    nginx 配置用户认证有两种方式: 1.auth_basic 本机认证,由ngx_http_auth_basic_module模块实现.配置段: http, server, location, li ...

  2. nginx 添加用户认证

    nginx 添加用户认证  nginx 配置文件添加: 配置代理添加用户认证:server {   listen       ;   server_name localhost;   location ...

  3. Nginx网站用户认证

    一.Nginx网站用户认证 用户认证:用户访问网页时需要输入一个用户名和密码才能打开网页. nginx的默认网页时安装目录下的html/index.html,配置文件在安装目录下的conf目录中的ng ...

  4. centos LAMP第二部分apache配置 下载discuz!配置第一个虚拟主机 安装Discuz! 用户认证 配置域名跳转 配置apache的访问日志 配置静态文件缓存 配置防盗链 访问控制 apache rewrite 配置开机启动apache tcpdump 第二十节课

    centos    LAMP第二部分apache配置  下载discuz!配置第一个虚拟主机 安装Discuz! 用户认证 配置域名跳转  配置apache的访问日志  配置静态文件缓存  配置防盗链 ...

  5. Nginx可以说是标配组件,但是主要场景还是负载均衡、反向代理、代理缓存、限流等场景;而把Nginx作为一个Web容器使用的还不是那么广泛。

    Nginx可以说是标配组件,但是主要场景还是负载均衡.反向代理.代理缓存.限流等场景:而把Nginx作为一个Web容器使用的还不是那么广泛. 用Nginx+Lua(OpenResty)开发高性能Web ...

  6. 高级运维(四):Nginx常见问题处理、安装部署Tomcat服务器、使用Tomcat部署虚拟主机

    一.Nginx常见问题处理 目标: 本案例要求对Nginx服务器进行适当优化,以提升服务器的处理性能: 1> 不显示Nginx软件版本号 2> 如果客户端访问服务器提示“Too many ...

  7. Linux高级运维 第八章 部署docker容器虚拟化平台

    8.1  Docker概述 实验环境: CENTOS7.4-63 64位 Dcoker概述 Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到 ...

  8. 企业IT运维以及信息管理部服务器管理

    方法 1.服务器有必要保持简洁.除了必要的应用软件以及安全软件之外,尽量不要安全其它的软件. 2.要做好服务器帐号权利规划和分配,分配够用的权利就行,从而降低密码泄漏带来的损失. 3.注意关注服务器软 ...

  9. 高级运维(五):构建memcached服务、LNMP+memcached、使用Tomcat设置Session、Tomcat实现session共享

    一.构建memcached服务 目标: 本案例要求先快速搭建好一台memcached服务器,并对memcached进行简单的添.删.改.查操作: 1> 安装memcached软件,并启动服务d ...

随机推荐

  1. Windows服务 --- SqlDependency的使用

    1   启用当前数据库的 SQL Server Service Broker a   检查Service Broker 是否开启 SELECT is_broker_enabled FROM sys.d ...

  2. hdu1574 I Hate It (线段树,查询区间最大值)

    Description 很多学校流行一种比较的习惯.老师们很喜欢询问,从某某到某某当中,分数最高的是多少. 这让很多学生很反感. 不管你喜不喜欢,现在需要你做的是,就是按照老师的要求,写一个程序,模拟 ...

  3. 后端优化(2)—— BA与图优化

  4. 前端每日实战:73# 视频演示如何用纯 CSS 创作一只卡通狐狸

    效果预览 按下右侧的"点击预览"按钮可以在当前页面预览,点击链接可以全屏预览. https://codepen.io/comehope/pen/OEKZed 可交互视频 此视频是可 ...

  5. Redis入门很简单之一【简介与环境搭建】

    Redis入门很简单之一[简介与环境搭建] 博客分类: NoSQL/Redis/MongoDB redisnosqlmemcached缓存中间件  [Redis简介] <一>. NoSQL ...

  6. git 远程库和本地库处理

    创建git库的方法 第一种方法: 在码云建立一个demo的git库.git clone在本地一个文件夹.之后会出现在.git的目录下方(这是clone而非pull切记分清楚) 而不是在.git的上一层 ...

  7. CentOS7.5 yum 安装与配置MySQL5.7.24

    安装环境:CentOS7 64位 MINI版,安装MySQL5.7 1.配置YUM源 在MySQL官网中下载YUM源rpm安装包:https://dev.mysql.com/downloads/rep ...

  8. 2019牛客多校第⑨场H Cutting Bamboos(主席树+二分)

    原题:https://ac.nowcoder.com/acm/contest/889/H 题意: 给你一些竹子,q个询问,问你从第l到第r个竹子,如果你要用y次砍完它,并且每次砍下来的长度是相同的,问 ...

  9. upc组队赛6 Bumped!【最短路】

    Bumped! 题目描述 Peter returned from the recently held ACM ICPC World finals only to find that his retur ...

  10. upc组队赛5 Assembly Required【思维】

    Assembly Required 题目描述 Princess Lucy broke her old reading lamp, and needs a new one. The castle ord ...