nginx+tomcat+memcached实现负载均衡和session共享

注:在后文的网页测试过程中的IP由于环境不同有所不一一对应

什么是tomcat:

Tomcat很受广大程序员的喜欢,因为它运行时占用的系统资源小,扩展性好,支持负载平衡与邮件服务等
开发应用系统常用的功能;而且它还在不断的改进和完善中,任何一个感兴趣的程序员都可以更改它或在其中加入新的功能。

Tomcat是一个小型的轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,
是开发和调试JSP程序的首选。对于一个初学者来说,可以这样认为,当在一台机器上配置好Apache服务器,
可利用它响应对HTML页面的访问请求。实际上Tomcat部分是Apache服务器的扩展,但它是独立运行的,
所以当你运行tomcat时,它实际上作为一个与Apache独立的进程单独运行的。

这里的诀窍是,当配置正确时,Apache为HTML页面服务,而Tomcat实际上运行JSP页面和Servlet。另外,
Tomcat和IIS、Apache等Web服务器一样,具有处理HTML页面的功能,另外它还是一个Servlet和JSP容器,
独立的Servlet容器是Tomcat的默认模式。不过,Tomcat处理静态HTML的能力不如Apache服务器。

系统实验环境:

server3:172.25.254.3,server3server5搭建jdk环境
server5:172.25.254.6
server6:172.25.254.8作负载均衡

server3搭建jdk环境:

[root@serve3 ~]# ls
jdk-7u79-linux-x64.tar.gz
[root@serve3 ~]# tar zxf jdk-7u79-linux-x64.tar.gz -C /usr/local/  解压到指定路径
[root@serve3 ~]# ls
jdk-7u79-linux-x64.tar.gz
[root@serve3 ~]# cd /usr/local/
[root@serve3 local]# ls
bin  etc  games  include  jdk1.7.0_79  lib  lib64  libexec  sbin  share  src
[root@serve3 local]# in -s jdk1.7.0_79/ java
-bash: syntax error near unexpected token `in'
[root@serve3 local]# ln -s jdk1.7.0_79/ java  制作软链接

这里写图片描述

[root@serve3 local]# vim /etc/profile  修改全局变量
export JAVA_HOME=/usr/local/java
export CLASSPATH=.:$JAVA_HOME/lib:$JAVA_HOME/jre/lib
export PATH=$PATH:$JAVA_HOME/bin

这里写图片描述

[root@serve3 local]# source /etc/profile  生效
[root@serve3 local]# echo $PATH  测试全局变量
/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin:/usr/local/java/bin
[root@serve3 local]# echo $JAVA_HOME
/usr/local/java
[root@serve3 local]# vim /etc/profile
[root@serve3 local]# cd

这里写图片描述

[root@serve3 ~]# vim test.java  测试jdk环境
public class test
{
        public static void main(String[] args)
        {
        System.out.println("hello world");
        }
}

这里写图片描述

[root@serve3 ~]# javac test.java  编译
[root@serve3 ~]# ls
jdk-7u79-linux-x64.tar.gz  test.class  test.java  编译完成会生成test.class文件
[root@serve3 ~]# file test.class   查看文件类型是一个java库文件
test.class: compiled Java class data, version 51.0
[root@serve3 ~]# java test  测试
Hello World
[root@serve3 ~]# ls
apache-tomcat-7.0.37.tar.gz  jdk-7u79-linux-x64.tar.gz  test.class  test.java
[root@serve3 ~]# tar zxf apache-tomcat-7.0.37.tar.gz -C /usr/local/  解压到指定路径
[root@serve3 ~]# cd /usr/local/
[root@serve3 local]# ln -s apache-tomcat-7.0.37/ tomcat  制作软链接
[root@serve3 local]# cd tomcat/
[root@serve3 tomcat]# bin/startup.sh  开启tomcat
Using CATALINA_BASE:   /usr/local/tomcat
Using CATALINA_HOME:   /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME:        /usr/local/java
Using CLASSPATH:       /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
[root@serve3 tomcat]# netstat -antlp|grep :8080  查看tomcat默认端口8080是否开启
tcp        0      0 :::8080                     :::*                        LISTEN      1627/java  

在网页测试:

这里写图片描述

[root@serve3 tomcat]# cd /usr/local/tomcat/webapps/ROOT/  tomcat默认发布目录
[root@serve3 ROOT]# pwd
/usr/local/tomcat/webapps/ROOT
[root@serve3 ROOT]# vim test.jsp  写一个测试页
[root@serve3 ROOT]# cat test.jsp 
The time is: <%=new java.util.Date()%>
[root@serve3 ROOT]# cd

这里写图片描述

在网页测试:

这里写图片描述

在server5进行相同的操作:

[root@server5 ~]# ls
apache-tomcat-7.0.37.tar.gz  nginx-1.10.1.tar.gz
jdk-7u79-linux-x64.tar.gz    nginx-sticky-module-ng.tar.gz
[root@server5 ~]# tar zxf jdk-7u79-linux-x64.tar.gz -C /usr/local/
[root@server5 ~]# cd /usr/local/
[root@server5 local]# ln -s jdk1.7.0_79/ java
[root@server5 local]# vim /etc/profile
[root@server5 local]# cat /etc/profile | tail -n 3
export JAVA_HOME=/usr/local/java
export CLASSPATH=.:$JAVA_HOME/lib:$JAVA_HOME/jre/lib
export PATH=$PATH:$JAVA_HOME/bin 
[root@server5 local]# source /etc/profile
[root@server5 local]# echo $PATH
/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin:/usr/local/java/bin
[root@server5 local]# echo $JAVA_HOME
/usr/local/java
[root@server5 local]# cd 
[root@server5 ~]# vim test.java
[root@server5 ~]# cat test.java 
public class test {
        public static void main(String[] args)
        {
                System.out.println("Hello World");
        }
}
[root@server5 ~]# javac test.java 
[root@server5 ~]# ls
apache-tomcat-7.0.37.tar.gz  nginx-1.10.1.tar.gz            test.class
jdk-7u79-linux-x64.tar.gz    nginx-sticky-module-ng.tar.gz  test.java
[root@server5 ~]# file test.class 
test.class: compiled Java class data, version 52.0
[root@server5 ~]# java test
Hello World

这里写图片描述

[root@server5 ~]# cd
[root@server5 ~]# tar zxf apache-tomcat-7.0.37.tar.gz -C /usr/local/
[root@server5 ~]# cd /usr/local/
[root@server5 local]# ln -s apache-tomcat-7.0.37/ tomcat
[root@server5 local]# cd tomcat/
[root@server5 tomcat]# bin/startup.sh 
Using CATALINA_BASE:   /usr/local/tomcat
Using CATALINA_HOME:   /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME:        /usr/local/java
Using CLASSPATH:       /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
[root@server5 tomcat]# netstat -antlp|grep :8080
tcp        0      0 :::8080                     :::*                        LISTEN      1218/java           

在网页测试:

这里写图片描述

[root@server5 tomcat]# cd /usr/local/tomcat/webapps/ROOT/
[root@server5 ROOT]# pwd
/usr/local/tomcat/webapps/ROOT
[root@server5 ROOT]# vim test.jsp
[root@server5 ROOT]# cat test.jsp 
server3 time is: <%=new java.util.Date()%>

这里写图片描述

在网页测试:

这里写图片描述

在server6编译nginx进行负载均衡的配置:

[root@server6 ~]# ls
nginx-1.10.1.tar.gz  nginx-sticky-module-ng.tar.gz
[root@server6 ~]# tar zxf nginx-1.10.1.tar.gz 
[root@server6 ~]# tar zxf nginx-sticky-module-ng.tar.gz 
[root@server6 ~]# cd nginx-1.10.1

这里写图片描述

[root@server6 nginx-1.10.1]# vim src/core/nginx.h
14 #define NGINX_VER          "nginx"   ##删除版本号,安全一点!

这里写图片描述

[root@server6 nginx-1.10.1]# vim auto/cc/gcc 
179 #CFLAGS="$CFLAGS -g"      ##注释掉这行,忽略编译信息,安装的容量会变小。

这里写图片描述

[root@server6 nginx-1.10.1]# yum install gcc pcre-devel openssl-devel -y
[root@server6 nginx-1.10.1]# ./configure --prefix=/usr/local/lnmp/nginx --with-http_ssl_module --with-http_stub_status_module --with-file-aio --with-threads --user=nginx --group=nginx --add-module=/root/nginx-sticky-module-ng

这里写图片描述

[root@server6 nginx-1.10.1]# make && make install  编译三部曲

这里写图片描述

[root@server6 ~]# cd nginx-1.10.1
[root@server6 nginx-1.10.1]# useradd nginx   建立用户
[root@server6 nginx-1.10.1]# cd /usr/local/lnmp/nginx/sbin/
[root@server6 sbin]# ./nginx  运行nginx
[root@server6 sbin]# vim /usr/local/lnmp/nginx/conf/nginx.conf
user  nginx nginx;
worker_processes  1;

#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

#pid        logs/nginx.pid;


events {
    worker_connections  1024;
}


http {
    upstream tomcat{
    server 172.25.254.3:8080;
    server 172.25.254.6:8080;
    }
    #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;

    sendfile        on;
    tcp_nopush     on;

    #keepalive_timeout  0;
    keepalive_timeout  65;

    gzip  on;

    server {
        listen       80;
        server_name  tomcat;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location / {
            root   html;
            index  index.html index.htm;
        }

        #error_page  404              /404.html;

        # redirect server error pages to the static page /50x.html
        #
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }

        # proxy the PHP scripts to Apache listening on 127.0.0.1:80
        #
        location ~ \.jsp$ {
            proxy_pass   http://tomcat;
        }

        # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
        #
        #location ~ \.php$ {
        #    root           html;
        #    fastcgi_pass   127.0.0.1:9000;
        #    fastcgi_index  index.php;
        #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
        #    include        fastcgi_params;
        #}

        # deny access to .htaccess files, if Apache's document root
        # concurs with nginx's one
        #
        #location ~ /\.ht {
        #    deny  all;
        #}
    }


    # another virtual host using mix of IP-, name-, and port-based configuration
    #
    #server {
    #    listen       8000;
    #    listen       somename:8080;
    #    server_name  somename  alias  another.alias;

    #    location / {
    #        root   html;
    #        index  index.html index.htm;
    #    }
    #}


    # HTTPS server
    #
    #server {
    #    listen       443 ssl;
    #    server_name  localhost;

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

}

这里写图片描述
这里写图片描述

[root@server6 ~]# cd /usr/local/lnmp/nginx/sbin/
[root@server6 sbin]# ./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.conf test is successful
[root@server6 sbin]# ./nginx -s reload  重载服务

这里写图片描述
这里写图片描述

在网页测试可以进行负载均衡:

这里写图片描述
这里写图片描述

但是访问tomcat的首页会没有图片,因为nginx和tomcat的默认访问不统一172.25.38.8/index.jsp:

这里写图片描述

修改配置文件:

[root@server6 conf]# vim nginx.conf
[root@server6 conf]# nginx -s reload

这里写图片描述

重新在网页测试172.25.38.8/index.jsp:

这里写图片描述

总结:

nginx-sticky-modulenginx 的第三方模块,使 nginx 支持 sticky 模式,所谓 sticky 模式,
就是指同一个用户的访问请求都被发送到同一个 tomcat 实例上处理。
访问 http://172.25.254.6/test.jsp,不同的主机访问时会调度到不同的 tomcat 实例上处理来自同一
主机的请求会交给同一个 tomcat 实例处理,此时你 down 掉当前正在响应的 tomcat 实例,nginx会自动
把用户的请求调度到另一个 tomcat 实例上,同时 session 也没有丢掉。 

在server3和server5配置进行session共享:

[root@server5 lib]# cd /usr/local/tomcat/webapps/ROOT/
[root@server5 ROOT]# vim test.jsp
[root@server5 ROOT]# cat test.jsp 
<%@ page contentType="text/html; charset=GBK" %>
<%@ page import="java.util.*" %>
<html><head><title>Cluster App Test</title></head>
<body>
Server Info:
<%
out.println(request.getLocalAddr() + " : " + request.getLocalPort()+"<br>");%>
<%
out.println("<br> ID " + session.getId()+"<br>");
String dataName = request.getParameter("dataName");
if (dataName != null && dataName.length() > 0) {
String dataValue = request.getParameter("dataValue");
session.setAttribute(dataName, dataValue);
}
out.print("<b>Session list</b>");
Enumeration e = session.getAttributeNames();
while (e.hasMoreElements()) {
String name = (String)e.nextElement();
String value = session.getAttribute(name).toString();
out.println( name + " = " + value+"<br>");
System.out.println( name + " = " + value);
}
%>
<form action="test.jsp" method="POST">
name:<input type=text size=20 name="dataName">
<br>
key:<input type=text size=20 name="dataValue">
<br>
<input type=submit>
</form>
</body>
</html>

这里写图片描述

[root@serve3 lib]# cd /usr/local/tomcat/webapps/ROOT/
[root@serve3 ROOT]# vim test.jsp

这里写图片描述

在网页测试由于负载均衡会一直切换后端:

这里使用的IP和上面的有所不同是因为换了环境,用nginx端调用即可:

这里写图片描述
这里写图片描述

[root@server6 conf]# vim nginx.conf   加入ip_hash算法
[root@server6 conf]# nginx -s reload

这里写图片描述

在网页测试:

这里写图片描述

[root@server5 ROOT]# cd /usr/local/tomcat/
[root@server5 tomcat]# ls
bin   lib      logs    RELEASE-NOTES  temp     work
conf  LICENSE  NOTICE  RUNNING.txt    webapps
[root@server5 tomcat]# bin/
catalina.sh      digest.sh        startup.sh       
configtest.sh    setclasspath.sh  tool-wrapper.sh  
daemon.sh        shutdown.sh      version.sh       
[root@server5 tomcat]# bin/shutdown.sh   将server5杀死之后
Using CATALINA_BASE:   /usr/local/tomcat
Using CATALINA_HOME:   /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME:        /usr/local/java
Using CLASSPATH:       /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar

在网页测试直接切换后端数据没有实现session共享:

这里写图片描述

进行session共享:

这里写图片描述

cd /usr/local/tomcat/lib/
[root@server5 lib]# ls
annotations-api.jar  ecj-4.2.1.jar  servlet-api.jar     tomcat-i18n-fr.jar
catalina-ant.jar     el-api.jar     tomcat-api.jar      tomcat-i18n-ja.jar
catalina-ha.jar      jasper-el.jar  tomcat-coyote.jar   tomcat-jdbc.jar
catalina.jar         jasper.jar     tomcat-dbcp.jar     tomcat-util.jar
catalina-tribes.jar  jsp-api.jar    tomcat-i18n-es.jar
[root@server5 lib]# ls
annotations-api.jar
asm-3.2.jar
catalina-ant.jar
catalina-ha.jar
catalina.jar
catalina-tribes.jar
ecj-4.2.1.jar
el-api.jar
jasper-el.jar
jasper.jar
jsp-api.jar
kryo-1.04.jar
kryo-serializers-0.10.jar
memcached-session-manager-1.6.3.jar
memcached-session-manager-tc7-1.6.3.jar
minlog-1.2.jar
msm-kryo-serializer-1.6.3.jar
reflectasm-1.01.jar
servlet-api.jar
spymemcached-2.7.3.jar
tomcat-api.jar
tomcat-coyote.jar
tomcat-dbcp.jar
tomcat-i18n-es.jar
tomcat-i18n-fr.jar
tomcat-i18n-ja.jar
tomcat-jdbc.jar
tomcat-util.jar
[root@server5 lib]# vim /usr/local/tomcat/conf/context.xml
[root@server5 ROOT]# cat /usr/local/tomcat/conf/context.xml | tail -n 7
<ManagerclassName="de.javakaffee.web.msm.MemcachedBackupSessionManager"
memcachedNodes="n1:172.25.254.3:11211,n2:172.25.254.6:11211"
failoverNodes="n2"
requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$"
transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory"
/>
<Context>

这里写图片描述

[root@server5 lib]# /usr/local/tomcat/bin/startup.sh
Using CATALINA_BASE:   /usr/local/tomcat
Using CATALINA_HOME:   /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME:        /usr/local/jdk
Using CLASSPATH:       /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
[root@server5 lib]# /etc/init.d/memcached start
Starting memcached:                                        [  OK  ]
[root@server5 lib]# /etc/init.d/memcached restart
Stopping memcached:                                        [  OK  ]
Starting memcached:                                        [  OK  ]

同样在另外一台设置:

[root@serve3 lib]# ls
annotations-api.jar
asm-3.2.jar
catalina-ant.jar
catalina-ha.jar
catalina.jar
catalina-tribes.jar
ecj-4.2.1.jar
el-api.jar
jasper-el.jar
jasper.jar
jsp-api.jar
kryo-1.04.jar
kryo-serializers-0.10.jar
memcached-session-manager-1.6.3.jar
memcached-session-manager-tc7-1.6.3.jar
minlog-1.2.jar
msm-kryo-serializer-1.6.3.jar
reflectasm-1.01.jar
servlet-api.jar
spymemcached-2.7.3.jar
tomcat-api.jar
tomcat-coyote.jar
tomcat-dbcp.jar
tomcat-i18n-es.jar
tomcat-i18n-fr.jar
tomcat-i18n-ja.jar
tomcat-jdbc.jar
tomcat-util.jar
[root@serve3 lib]# vim /usr/local/tomcat/conf/context.xml
[root@serve3 lib]# /usr/local/tomcat/bin/startup.sh
Using CATALINA_BASE:   /usr/local/tomcat
Using CATALINA_HOME:   /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME:        /usr/local/jdk
Using CLASSPATH:       /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
[root@serve3 lib]# /etc/init.d/memcached start
Starting memcached:                                        [  OK  ]
[root@serve3 lib]# /etc/init.d/memcached restart

这里写图片描述

在网页测试提交:

这里写图片描述

[root@server5 ~]# /usr/local/tomcat/bin/shutdown.sh   将server5的tomcat关闭
Using CATALINA_BASE:   /usr/local/tomcat
Using CATALINA_HOME:   /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME:        /usr/local/jdk
Using CLASSPATH:       /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar

在网页再次测试提交:

这里写图片描述

浏览器刷新可以访问到 ,保证了数据不会丢失实现了session共享:

这里写图片描述

[root@server5 lib]# /etc/init.d/memcached stop  关闭memcached
Stopping memcached:                                        [  OK  ]

在网页测试数据依旧没有影响:

这里写图片描述

linux下的虚拟主机设置:

[root@server6 ROOT]# vim /usr/local/lnmp/nginx/conf/nginx.conf  更改配置文件加入虚拟主机
server {
        listen 80;
        server_name www.westos.org;

        location / {
                root /www1;
                index index.html;
        }
}
server {
        listen 80;
        server_name www.linux.org;

        location / {
                root /www2;
                index index.html;
        }
}

这里写图片描述

[root@server6 ROOT]# nginx -s reload  重新加载
[root@server6 ROOT]# cd /usr/local/lnmp/nginx/conf/
[root@server6 conf]# mkdir /www1
[root@server6 conf]# mkdir /www2
[root@server6 conf]# cd /www1/
[root@server6 www1]# vim index.html  编写默认访问文件
[root@server6 www1]# cat index.html 
www.westos.org
[root@server6 www1]# cd /www2/
[root@server6 www2]# ls
[root@server6 www2]# vim index.html
[root@server6 www2]# cat index.html 
www.linux.org

在真机添加解析:

[root@foundation38 Desktop]# vim /etc/hosts  添加解析
[root@foundation38 Desktop]# cat /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
172.25.38.100 www.westos.org bbs.westos.org
172.25.38.6 www.westos.org bbs.westos.org
172.25.38.2 server1
172.25.38.3 server2
172.25.38.7  www.westos.org  www.linux.org

这里写图片描述

在网页访问:

这里写图片描述
这里写图片描述

https的加密访问:

[root@server6 www2]# vim /usr/local/lnmp/nginx/conf/nginx.conf
server {
        listen       443 ssl;
        server_name  www.westos.org;

        ssl_certificate      cert.pem;
        ssl_certificate_key  cert.pem;

        ssl_session_cache    shared:SSL:1m;
        ssl_session_timeout  5m;

        ssl_ciphers  HIGH:!aNULL:!MD5;
        ssl_prefer_server_ciphers  on;

        location / {
            root   /www1;
            index  index.html index.htm;
        }
    }

这里写图片描述

[root@server6 www2]# nginx -s reload  重载nginx服务,因为没有证书加密
nginx: [emerg] BIO_new_file("/usr/local/lnmp/nginx/conf/cert.pem") failed (SSL: error:02001002:system library:fopen:No such file or directory:fopen('/usr/local/lnmp/nginx/conf/cert.pem','r') error:2006D080:BIO routines:BIO_new_file:no such file)
[root@server6 www2]# cd /etc/pki/
[root@server6 pki]# ls
CA  ca-trust  entitlement  java  nssdb  product  rpm-gpg  rsyslog  tls
[root@server6 pki]# cd tls/
[root@server6 tls]# ls
cert.pem  certs  misc  openssl.cnf  private
[root@server6 tls]# cd cert
-bash: cd: cert: No such file or directory
[root@server6 tls]# cd certs/
[root@server6 certs]# ls
ca-bundle.crt  ca-bundle.trust.crt  make-dummy-cert  Makefile  renew-dummy-cert
[root@server6 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
..+++
...+++
writing new private key to '/tmp/openssl.a4cevI'
-----

这里写图片描述

You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
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]:westos 
Organizational Unit Name (eg, section) []:linux
Common Name (eg, your name or your server's hostname) []:server1
Email Address []:root@localhost
[root@server6 certs]# ll cert.pem 
-rw------- 1 root root 3092 Aug  7 16:14 cert.pem
[root@server6 certs]# cp cert.pem /usr/local/lnmp/nginx/conf/
[root@server6 certs]# nginx -s reload

这里写图片描述

在网页访问:

点击Advance即可:
这里写图片描述
点击Add Exception:
这里写图片描述
点击Get certificate获取证书:
这里写图片描述
这里写图片描述
点击锁可以显示证书信息:
这里写图片描述

查看淘宝的重定向:

[root@foundation38 Desktop]# curl -I taobao.com
HTTP/1.1 302 Found
Server: Tengine
Date: Tue, 07 Aug 2018 08:54:02 GMT
Content-Type: text/html
Content-Length: 258
Connection: keep-alive
Location: http://www.taobao.com/

[root@foundation38 Desktop]# curl -I www.taobao.com
HTTP/1.1 302 Found
Server: Tengine
Date: Tue, 07 Aug 2018 08:54:08 GMT
Content-Type: text/html
Content-Length: 258
Connection: keep-alive
Location: https://www.taobao.com/
Set-Cookie: thw=cn; Path=/; Domain=.taobao.com; Expires=Wed, 07-Aug-19 08:54:08 GMT;
Strict-Transport-Security: max-age=31536000

这里写图片描述
nginx的重定向1:

[root@server6 certs]# vim /usr/local/lnmp/nginx/conf/nginx.conf
server {
        listen 80;
        server_name www.linux.org westos.org;  多加进去一个域名

        location / {
                root /www2;
                index index.html;
        }
[root@server6 certs]# nginx -s reload

在真机测试域名可以用:

[root@foundation38 Desktop]# curl -I westos.org
HTTP/1.1 301 Moved Permanently
Server: wts/1.2
Date: Tue, 07 Aug 2018 08:59:55 GMT
Content-Type: text/html; charset=iso-8859-1
Connection: keep-alive
Location: http://www.westos.org/

这里写图片描述
加入重定向到https加密:

[root@server6 certs]# vim /usr/local/lnmp/nginx/conf/nginx.conf
[root@server6 certs]# nginx -s reload
server {
        listen 80;
        server_name www.linux.org westos.org;
        rewrite ^(.*)$ https://www.westos.org permanent;
        #location / {
        #       root /www2;
        #       index index.html;
        #}      
}
[root@foundation38 Desktop]# curl -I westos.org
HTTP/1.1 301 Moved Permanently
Server: wts/1.2
Date: Tue, 07 Aug 2018 09:05:41 GMT
Content-Type: text/html; charset=iso-8859-1
Connection: keep-alive
Location: http://www.westos.org/

[root@foundation38 Desktop]# curl -I westos.org/index.html  在真机测试可以直接重定向到加密
HTTP/1.1 301 Moved Permanently
Server: wts/1.2
Date: Tue, 07 Aug 2018 09:05:55 GMT
Content-Type: text/html; charset=iso-8859-1
Connection: keep-alive
Location: http://www.westos.org/index.html

这里写图片描述

当后面有域名时候会重定向:

[root@server6 www2]# vim /usr/local/lnmp/nginx/conf/nginx.conf
server {
        listen 80;
        server_name www.westos.org westos.org;
        #rewrite ^(.*)$ https://www.westos.org permanent;
        rewrite ^/bbs$ http://bbs.westos.org permanent;
        location / {
                root /www1;
                index index.html;
        }
}
server {
        listen 80;
        server_name bbs.westos.org;
        location / {
                root /www2;
                index index.html;
        }
}
[root@server6 www2]# nginx -s reload
[root@foundation38 Desktop]# curl -I www.westos.org/bbs
HTTP/1.1 301 Moved Permanently
Server: nginx/
Date: Tue, 07 Aug 2018 09:26:08 GMT
Content-Type: text/html
Content-Length: 179
Connection: keep-alive
Location: http://bbs.westos.org

这里写图片描述
当有域名的时候也会重定向:

[root@server6 www2]# vim /usr/local/lnmp/nginx/conf/nginx.conf
[root@server6 www2]# nginx -s reload
server {
        listen 80;
        server_name www.westos.org westos.org;
        #rewrite ^(.*)$ https://www.westos.org permanent;
        rewrite ^/bbs$ http://bbs.westos.org permanent;
        rewrite ^/bbs/(.*)$ http://bbs.westos.org/$1 permanent;
        location / {
                root /www1;
                index index.html;
        }
}
server {
        listen 80;
        server_name bbs.westos.org;
        location / {
                root /www2;
                index index.html;
        }
}
[root@foundation38 Desktop]# curl -I www.westos.org/bbs/index.html
HTTP/1.1 301 Moved Permanently
Server: nginx/
Date: Tue, 07 Aug 2018 09:32:22 GMT
Content-Type: text/html
Content-Length: 179
Connection: keep-alive
Location: http://bbs.westos.org/index.html

这里写图片描述
用if重定向:

[root@server6 www2]# cd /www1/
[root@server6 www1]# mkdir bbs
[root@server6 www1]# cd bbs/
[root@server6 bbs]# ls
[root@server6 bbs]# vim index.html
[root@server6 bbs]# cat index.html 
www.westos.org - bbs
[root@server6 bbs]# vim /usr/local/lnmp/nginx/conf/nginx.conf
[root@server6 bbs]# nginx -s reload

这里写图片描述

[root@foundation38 Desktop]# curl -I bbs.westos.org
HTTP/1.1 301 Moved Permanently
Server: nginx/
Date: Tue, 07 Aug 2018 09:49:45 GMT
Content-Type: text/html
Content-Length: 179
Connection: keep-alive
Location: http://www.westos.org/bbs/
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值