一、搭建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. Halo(四)

    BeanWrapper 接口 操作属性 package org.springframework.beans; BeanWrapper bw = new BeanWrapperImpl(beanObje ...

  2. 【CSS】position(定位)属性

    关于CSS position,来自MDN的描述: CSS position属性用于指定一个元素在文档中的定位方式.top.right.bottom.left 属性则决定了该元素的最终位置. 然后来看看 ...

  3. MD5、SHA1、DES加密和解密,Base64编码解码

    /// <summary> /// EncryptHelper 来自 www.Admin10000.com /// </summary> public class Encryp ...

  4. linux中软连接和硬链接的区别

    linux中创建软连接和硬链接的方法: 软连接: ln -s oldfile slink 硬连接: ln oldfile hlink linux中创建软连接和硬链接的区别:        原理上,硬链 ...

  5. spring相关注解

    spring相关注解: 使用之前需要<context:annotation-config/>在配置文件中启用 @Required 应用于类属性的set方法,并且要求该属性必须在xml容器里 ...

  6. angular.js实现二级tab切换

    <div class="guide-type"> <h3 ng-class="{true:'active', false:''}[tab == 'pc' ...

  7. 递归,装饰器,python常用内置方法

    **递归**        def calc(n):            print(n)            if int(n / 2) == 0:  条件判断                r ...

  8. a number of 和the number of用法

    a number of 和the number of用法 1.   A number of + 複數名詞 + 複數動詞           =some/或a lot of + 複數名詞 + 複數動詞 ...

  9. C# 线程池的使用 终止线程池中的队列

    C#的线程池使用起来还是非常简单的,这里记录一下. 根据http://blog.csdn.net/chen_zw/article/details/7939834里的描述这里记录一下C#线程池的特点 一 ...

  10. SQL Server 2014 中新建登录及权限分配【界面版】

    本篇经验将和大家介绍分配SQL Server 2014 中,新建登录用户,分配权限,并指定该用户的数据库的方法,希望对大家的工作和学习有所帮助! 方法/步骤 1 打开 MS SQL Server Ma ...