高级运维(二):搭建Nginx服务器、用户认证、基于

2019-08-03 23:09栏目:电脑操作

主机环境 RedHat6.5  64位
实验环境 服务端 ip172.25.29.1    nginx
  服务端 ip 172.25.29.2  apache
  服务端 ip 172.25.29.3  apache
  测试端 ip 172.25.254.29
安装包      nginx-1.10.1.tar.gz
nginx用作反向代理
 
服务端1
1.  安装nginx
1.解压及简单配置
[root@server1 mnt]# yum install gcc -y      #安装gcc
[root@server1 mnt]# tar zxf nginx-1.10.1.tar.gz  #解压nginx压缩包
[root@server1 mnt]# ls
nginx-1.10.1 nginx-1.10.1.tar.gz
[root@server1 mnt]# cd nginx-1.10.1
[root@server1 nginx-1.10.1]# vim auto/cc/gcc    #禁止debug调试
 178 # debug
 179#CFLAGS="$CFLAGS -g"
[root@server1 nginx-1.10.1]# vim src/core/nginx.h  #禁止出现nginx版本号,以保证安全性
 14 #defineNGINX_VER          "nginx/"
 
  2.软件配置(静态)
[root@server1 nginx-1.10.1]# ./configure--prefix=/usr/local/lnmp/nginx --with-http_ssl_module--with-http_stub_status_module
 
如果出现以下错误

一、搭建Nginx服务器

图片 1

目标:

[root@server1 nginx-1.10.1]# yum install pcre-devel -y
 
重新配置
[root@server1 nginx-1.10.1]# ./configure--prefix=/usr/local/lnmp/nginx --with-http_ssl_module--with-http_stub_status_module
 
如果出现以下错误

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

图片 2

1> SSL加密功能

[root@server1 nginx-1.10.1]# yum install openssl-devel -y
 
重新配置
[root@server1 nginx-1.10.1]# ./configure--prefix=/usr/local/lnmp/nginx --with-http_ssl_module--with-http_stub_status_module
 
3.编译、链接、安装
[root@server1 nginx-1.10.1]# make

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

图片 3

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

[root@server1 nginx-1.10.1]# make install

1> 使用火狐浏览器访问

图片 4
 
2.将nginx作为系统变量,开启nginx
 [root@server1nginx-1.10.1]# cd /usr/local/lnmp/nginx/
[root@server1 nginx]# ls
conf  html  logs sbin
[root@server1 nginx]# ln -s /usr/local/lnmp/nginx/sbin/nginx/usr/local/sbin/  #作软链接将nginx的启动命令作为系统命令
[root@server1 nginx]# nginx -t    #检测
nginx: the configuration file/usr/local/lnmp/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/lnmp/nginx/conf/nginx.conftest is successful
[root@server1 nginx]# nginx    #打开nginx
[root@server1 nginx]# cd conf/
 
3.配置文件中模块的修改及测试
[root@server1 conf]# useradd -u 900 -d /usr/local/lnmp/nginx/nginx  #创建管理nginx的用户
 
1.修改用户、添加cpu及绑定cpu
[root@server1 conf]# vim nginx.conf
  2 user  nginx;    #修改nginx的用户
  3 worker_processes  2;  #工作进程,两块cpu
  4 worker_cpu_affinity01 10;  #绑定cpu
[root@server1 conf]# nginx -t  #检测
nginx: the configuration file/usr/local/lnmp/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/lnmp/nginx/conf/nginx.conftest is successful
[root@server1 conf]# nginx -s reload  #重载
 
测试
[root@server1 conf]# ps aux | grep nginx

2> 使用curl访问

图片 5
 
[root@server1 conf]# vim nginx.conf
 13 events {
 14    worker_connections  4096; #支持的最大链接数
 15 }
[root@server1 conf]# nginx -t  #检测
nginx: the configuration file/usr/local/lnmp/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/lnmp/nginx/conf/nginx.conftest is successful
[root@server1 conf]# nginx -s reload  #重载
 
[root@server1 conf]# vim /etc/security/limits.conf  #系统分配给nginx的
 51 nginx  -      nofile  200
 52 nginx  -      nproc  200
[root@server1 conf]# :() { :|:& };:    #测试 
如果把上面200改成4096,那么系统直接卡死
 
2.查看nginx状态
[root@server4 conf]# vim nginx.conf  #查看nginx状态
 57        location /status {
 58                stub_status on;
 59                access_log off;
 60        }
[root@server1 conf]# nginx -t
nginx: the configuration file/usr/local/lnmp/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/lnmp/nginx/conf/nginx.conftest is successful
[root@server4 conf]# nginx -s reload
[root@server1 mnt]# yum install httpd -y
 
[root@server1 conf]# vim /etc/httpd/conf/httpd.conf
  136 Listen 8080      #之前nginx监听80端口,httpd就换了端口
[root@server1 conf]# /etc/init.d/httpd start
Starting httpd:                                          [  OK  ]
测试 172.25.29.1/status

方案:

图片 6
 
3.nginx访问加密(自定义签名证书)
在互联网中,如果访问不加密,会导致很多重要信息泄露,所有才有了加密
[root@server4 conf]# vim nginx.conf    #访问加密
101    #
102    server {
103        listen      443 ssl;
104        server_name  localhost;
105
106        ssl_certificate      cert.pem;
107        ssl_certificate_key  cert.pem;
108
109        ssl_session_cache    shared:SSL:1m;
110        ssl_session_timeout  5m;
111
112        ssl_ciphers  HIGH:!aNULL:!MD5;
113        ssl_prefer_server_ciphers  on;
114
115        location / {
116            root  html;
117            index  index.html index.htm;
118        }
119    }
120
[root@server1 conf]# cd /etc/pki/tls/certs/
[root@server1 certs]# make cert.pem    #生成自定义签名证书
umask 77 ;
    PEM1=`/bin/mktemp/tmp/openssl.XXXXXX` ;
    PEM2=`/bin/mktemp/tmp/openssl.XXXXXX` ;
    /usr/bin/openssl req-utf8 -newkey rsa:2048 -keyout $PEM1 -nodes -x509 -days 365 -out $PEM2-set_serial 0 ;
    cat $PEM1 >  cert.pem ;
    echo ""    >> cert.pem ;
    cat $PEM2 >>cert.pem ;
    rm -f $PEM1 $PEM2
Generating a 2048 bit RSA private key
..............
................

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

writing new private key to '/tmp/openssl.9egbT2'

You are about to be asked to enter information that will beincorporated
into your certificate request.
What you are about to enter is what is called a DistinguishedName or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,

图片 7

If you enter '.', the field will be left blank.

Country Name (2 letter code) [XX]:CN
State or Province Name (full name) []:Shaanxi
Locality Name (eg, city) [Default City]:xi'an
Organization Name (eg, company) [Default Company Ltd]:wen
Organizational Unit Name (eg, section) []:linux
Common Name (eg, your name or your server's hostname)[]:server1.example.com
Email Address []:root@server1.example.com
[root@server1 certs]# mv cert.pem /usr/local/lnmp/nginx/conf/
[root@server1 certs]# nginx -t
nginx: the configuration file/usr/local/lnmp/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/lnmp/nginx/conf/nginx.conftest is successful
[root@server1 certs]# nginx -s reload
 
测试 https://172.25.29.1

图片 8

选择 I Understand the Risks,确认

图片 9
 
4.虚拟主机
虚拟主机允许从一个httpd服务器同时为多个网站提供服务
[root@server1 certs]# cd /usr/local/lnmp/nginx/conf/
[root@server1 conf]# vim nginx.conf
120    server {
121                listen 80;  #监听端口
122                server_name www.wen.com;  #域名
123
124                location / {
125                        root /web1;    #默认发布目录
126                        index index.html;  #默认发布文件
127                }
128    }
129    server {
130                listen 80;
131                server_name www.mi.com;
132
133                location / {
134                        root /web2;
135                        index index.html;
136                }
137    }
[root@server1 conf]# mkdir /web1 /web2
[root@server1 conf]# vim /web1/index.html
Welcome to www.wen.com
[root@server1 conf]# vim /web2/index.html
Welcome to www.mi.com
[root@server1 conf]# nginx -t
nginx: the configuration file /usr/local/lnmp/nginx/conf/nginx.confsyntax is ok
nginx: configuration file /usr/local/lnmp/nginx/conf/nginx.conftest is successful
[root@server1 conf]# nginx -s reload
测试
在测试端的主机里加上域名解析
[root@foundation29 Desktop]# vim /etc/hosts
172.25.29.1 www.wen.comwww.mi.com

图片 10

图片 11
 
5.轮询负载均衡
  参数说明: round-robin (默认)
    wegiht :默认为1.weight越大,负载的权重就越大
            backup: 其它所有的非backup机器都down时,才会请求backup机器。所以这台机器压力会最轻
ip_hash:每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题
 
 [root@server1 conf]# vim nginx.conf
 18 http {
 19        upstream wen {
 20                server 172.25.29.2:80;
 21                server 172.25.29.3:80weight=2;
 22                server 172.25.29.4:8080backup;
 23        }
125    server {
126                listen80;
127                server_name www.wen.com;
128
129                location / {
130                        #root /web1;
131                        #index index.html;
132                        proxy_pass ;   
133                }
134    }
[root@server1 conf]# nginx -t
nginx: the configuration file/usr/local/lnmp/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/lnmp/nginx/conf/nginx.conftest is successful
[root@server1 conf]# nginx -s reload
[root@server1 conf]# vim /var/www/html/index.html
[root@server1 conf]# /etc/init.d/httpd restart
Stopping httpd:                                          [  OK  ]
Starting httpd:                                          [  OK  ]
 
 
其他两个2,3服务端,测试时要保证其http服务开启且默认访问的首页的路径下要有index.html文件,在文件里要有内容(随便什么都行)
测试
[kiosk@foundation29 ~]$ for i in $(seq 10 );do curl www.wen.com; done
<h1>server3</h1>
<h1>www.westos.org-server2</h1>
<h1>server3</h1>
<h1>server3</h1>
<h1>www.westos.org-server2</h1>
<h1>server3</h1>
<h1>server3</h1>
<h1>www.westos.org-server2</h1>
<h1>server3</h1>
<h1>server3</h1>
[kiosk@foundation29 ~]$ for i in $(seq 10 );do curl www.wen.com; done  当server3 httpd stop 之后
<h1>www.westos.org-server2</h1>
<h1>www.westos.org-server2</h1>
<h1>www.westos.org-server2</h1>
<h1>www.westos.org-server2</h1>
<h1>www.westos.org-server2</h1>
<h1>www.westos.org-server2</h1>
<h1>www.westos.org-server2</h1>
<h1>www.westos.org-server2</h1>
<h1>www.westos.org-server2</h1>
<h1>www.westos.org-server2</h1>
[kiosk@foundation29 ~]$ for i in $(seq 10 );do curl www.wen.com; done  当server2和server3httpd都 stop 之后
<h1>please try again!</h1>
<h1>please try again!</h1>
<h1>please try again!</h1>
<h1>please try again!</h1>
<h1>please try again!</h1>
<h1>please try again!</h1>
<h1>please try again!</h1>
<h1>please try again!</h1>
<h1>please try again!</h1>
<h1>please try again!</h1>
 
[kiosk@foundation29 ~]$ for i in $(seq 10 );do curl www.wen.com; done  当server2 和server3的httpd 都start之后,继续轮询
<h1>www.westos.org-server2</h1>
<h1>www.westos.org-server2</h1>
<h1>server3</h1>
<h1>server3</h1>
<h1>www.westos.org-server2</h1>
<h1>server3</h1>
<h1>server3</h1>
<h1>www.westos.org-server2</h1>
<h1>server3</h1>
<h1>server3</h1>

更多Nginx负载均衡配置相关教程见以下内容

Nginx负载均衡配置说明 http://www.linuxidc.com/Linux/2016-03/129424.htm

Linux下Nginx Tomcat负载均衡和动静分离配置要点  http://www.linuxidc.com/Linux/2016-01/127255.htm

Docker Nginx Tomcat7配置简单的负载均衡  http://www.linuxidc.com/Linux/2015-12/125907.htm

Nginx负载均衡(主备) Keepalived  http://www.linuxidc.com/Linux/2015-12/126865.htm

使用Nginx作为负载均衡器 http://www.linuxidc.com/Linux/2015-12/125789.htm

使用Nginx简单实现负载均衡  http://www.linuxidc.com/Linux/2016-08/134443.htm

Nginx负载均衡与高可用的实现 http://www.linuxidc.com/Linux/2016-04/130350.htm

Nginx 的详细介绍:请点这里
Nginx 的下载地址:请点这里

本文永久更新链接地址:http://www.linuxidc.com/Linux/2016-10/135976.htm

图片 12

安装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

# curl 

二、用户认证

目标:

沿用练习一,通过调整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      #输入用户名密码才可以访问

三、基于域名的虚拟主机

目标:

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

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

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

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

 [root@client ~]# firefox             //输入密码后可以访问

[root@client ~]# firefox             //直接访问

四、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             //信任证书后可以访问

五、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。如下图所示。

图片 13

 

步骤:

步骤一:部署实施后端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 ;

        }

}

2)重启nginx服务

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

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

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

步骤二:配置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 ;
            }
    }

2)重启nginx服务

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

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

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

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 ;
            }
    }

5)重启nginx服务

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

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

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

版权声明:本文由威尼斯人app发布于电脑操作,转载请注明出处:高级运维(二):搭建Nginx服务器、用户认证、基于