<<上篇 | 首页 | 下篇>>

nginx设置SSL反向代理 - NginxApache - freemouse-笔记-感悟-成长

Nginx的反向代理通常用来映射内网中提供的Apache、IIS、Lighttpd服务,以实现负载均衡;同时,由于动态服务程序运行在内网,服务器的整体安全性也有所提高,那么怎样用nginx设置SSL反向代理呢?

 

使用nginx设置SSL的优点不少:

  1. 易用性:nginx安装、升级简单,nginx的平滑升级使得网站服务器不需要重启就可以完成升级任务。
  2. 安全性:nginx对于代理是透明的,因此,相当于为放置在代理后的Apache等服务器提供一道安全屏障、可以抵御一些基本web的攻击。
  3. 低负载:负载低是nginx的另一大优点。可以在nginx代理后配置多个apache服务器以满足不同需求
  4. 缓存:可以将除动态文件以外的文件,如css、js、静态html页直接交给nginx处理,以进一步降低负载
  5. 文件压缩:nginx可以优化并减小文件传输尺寸,缩短文件读取时间。

说了一大堆优点,相信诸位看官该跃跃欲试了吧,闲话少提^_^,下面给出配置实例:

由于,下面的代码只是用来演示整个配置过程,因此,我使用的SSL安全证书是自己签名的,如果需要能够通过验证的SSL安全证书,请到CAs自我了断^_^(网站地址:www.verisign.com)。

一、生成SSL安全证书

在nginx的配置目录下新建一个文件夹用以存放证书

# cd /usr/local/nginx/conf
# mkdir ssl
# cd ssl

生成一个私有key

# openssl genrsa -des3 -out nixcraft.in.key 1024

openssl-private-key.png

生成CSR(Certificate Signing Request)文件:

# openssl req -new -key nixcraft.in.key -out nixcraft.in.csr

openssl-create-csr.png

请输入自己的证书域名。上图红框的部分

二、配置SSL反向代理

编辑nginx的配置文件

#vi /usr/local/ngnix/conf/nginx.conf

添加如下代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
server {
        ### server port and name ###
        listen          443 ssl;
        server_name     nixcraft.in;
 
        ### SSL log files ###
        access_log      logs/ssl-access.log;
        error_log       logs/ssl-error.log;
 
        ### SSL cert files ###
        ssl_certificate      ssl/nixcraft.in.crt;
        ssl_certificate_key  ssl/nixcraft.in.key;
        ### Add SSL specific settings here ###
        keepalive_timeout    60;
 
        ###  Limiting Ciphers ########################
        # Uncomment as per your setup
        #ssl_ciphers HIGH:!ADH;
        #ssl_perfer_server_ciphers on;
        #ssl_protocols SSLv3;
        ##############################################
        ### We want full access to SSL via backend ###
        location / {
                proxy_pass  http://nixcraft;
                ### force timeouts if one of backend is died ##
                proxy_next_upstream error timeout invalid_header http_500 http_502 http_503;
 
                ### Set headers ####
                proxy_set_header Host $host;
                proxy_set_header X-Real-IP $remote_addr;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
 
                ### Most PHP, Python, Rails, Java App can use this header ###
                proxy_set_header X-Forwarded-Proto https;
 
                ### By default we don't want to redirect it ####
                proxy_redirect     off;
      }

保存、并重新加载配置文件

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

查看是否配置成功:

# netstat -tulpn | grep :443

SSL配置大功告成了

阅读全文……

标签 : ,

android开发 Json解析种类大全 - Return_Code的专栏 - 博客频道 - CSDN.NET

  1. /** 
  2.      * 对MapString类型数据进行解析 
  3.      * @param json 
  4.      * @return 
  5.      */  
  6.     public static Map<String, String> getMapStr(String json){  
  7.         Map<String, String> mapStr = new HashMap<String, String>();  
  8.         try {  
  9.             mapStr = JSON.parseObject(json, new TypeReference<Map<String, String>>(){});  
  10.         } catch (Exception e) {  
  11.             e.printStackTrace();  
  12.         }  
  13.         return mapStr;  
  14.     }  
  15.       
  16.     /** 
  17.      * 对MapObject类型数据进行解析 
  18.      * @param json 
  19.      * @return 
  20.      */  
  21.     public static Map<String, Object> getMapObj(String json){  
  22.         Map<String, Object> mapStr = new HashMap<String, Object>();  
  23.         try {  
  24.             mapStr = JSON.parseObject(json, new TypeReference<Map<String, Object>>(){});  
  25.         } catch (Exception e) {  
  26.             e.printStackTrace();  
  27.         }  
  28.         return mapStr;  
  29.     }  
  30.       
  31.     /** 
  32.      * 对listmap类型进行解析 
  33.      * @param json 
  34.      * @return 
  35.      */  
  36.     public static List<Map<String, Object>> getListMap(String json){  
  37.         List<Map<String, Object>> list = new ArrayList<Map<String,Object>>();  
  38.         try {  
  39.             list = JSON.parseObject(json,new TypeReference<List<Map<String, Object>>>(){});  
  40.         } catch (Exception e) {  
  41.             e.printStackTrace();  
  42.         }  
  43.         return list;  
  44.     }  
  45. }  

阅读全文……

标签 :

判定文件编码或文本流编码的方法

如果项目对要判定的文本文件编码不可控(比如用户上传的一些HTML、XML等文本),可以采用一个现成的开源项目:cpdetector,它所在的网址是:http://cpdetector.sourceforge.net/。它的类库很小,只有500K左右,利用该类库判定文本文件的代码如下:

Java代码  收藏代码
  1. /*------------------------------------------------------------------------ 
  2.   detector是探测器,它把探测任务交给具体的探测实现类的实例完成。 
  3.   cpDetector内置了一些常用的探测实现类,这些探测实现类的实例可以通过add方法 
  4.   加进来,如ParsingDetector、 JChardetFacade、ASCIIDetector、UnicodeDetector。   
  5.   detector按照“谁最先返回非空的探测结果,就以该结果为准”的原则返回探测到的 
  6.   字符集编码。 
  7. --------------------------------------------------------------------------*/  
  8. cpdetector.io.CodepageDetectorProxy detector =  
  9. cpdetector.io.CodepageDetectorProxy.getInstance();  
  10. /*------------------------------------------------------------------------- 
  11.   ParsingDetector可用于检查HTML、XML等文件或字符流的编码,构造方法中的参数用于 
  12.   指示是否显示探测过程的详细信息,为false不显示。 
  13. ---------------------------------------------------------------------------*/  
  14. detector.add(new cpdetector.io.ParsingDetector(false));   
  15. /*-------------------------------------------------------------------------- 
  16.   JChardetFacade封装了由Mozilla组织提供的JChardet,它可以完成大多数文件的编码 
  17.   测定。所以,一般有了这个探测器就可满足大多数项目的要求,如果你还不放心,可以 
  18.   再多加几个探测器,比如下面的ASCIIDetector、UnicodeDetector等。 
  19.  ---------------------------------------------------------------------------*/   
  20. detector.add(cpdetector.io.JChardetFacade.getInstance());  
  21. //ASCIIDetector用于ASCII编码测定  
  22. detector.add(cpdetector.io.ASCIIDetector.getInstance());  
  23. //UnicodeDetector用于Unicode家族编码的测定  
  24. detector.add(cpdetector.io.UnicodeDetector.getInstance());  
  25. java.nio.charset.Charset charset = null;  
  26. File f=new File("待测的文本文件名");  
  27. try {  
  28.       charset = detector.detectCodepage(f.toURL());  
  29. catch (Exception ex) {ex.printStackTrace();}  
  30. if(charset!=null){  
  31.      System.out.println(f.getName()+"编码是:"+charset.name());  
  32. }else  
  33.     System.out.println(f.getName()+"未知");  

阅读全文……