admin 管理员组

文章数量: 887021


2024年1月17日发(作者:mybatisplus的优缺点)

Nginx + tomcat + SSL 安装配置手册

1. 介绍

Nginx ("engine x") 是一个高性能的 HTTP 和 反向代理 服务器,也是一个

IMAP/POP3/SMTP 代理服务器。

nginx有以下几项基本特性:

 模块化结构

过滤器包括gzipping, byte ranges, chunked responses,以及 SSI-filter等filter。

 高性能

支持内核Poll模型,能经受高负载的考验,有报告表明能支持高达 50,000个并发连接数。

 高稳定性

Nginx采取了分阶段资源分配技术,使得它的CPU与内存占用率非常低。官方表示保持10,000个没有活动的连接,它只占2.5M内存。

 多负载策略

多种分配策略,并且分配均匀。

自Nginx 发布四年来,Nginx 已经因为它的稳定性、丰富的功能集、 示例配置文件和低系统资源的消耗而闻名了。目前国内各大门户网站已经部署了Nginx,如新浪、网易、腾讯等;国内几个重要的视频分享网站也部署了Nginx,如六房间、酷6等。

2. 准备

2.1 资源

Nginx中文网站:/

Nginx英文网站:/

PCRE网站:/

2.2

1)

相关软件

PCRE

PCRE(Perl Compatible Regular Expressions)中文含义:perl语言兼容正则表达式)是一个用C语言编写的

正则表达式函数库。

neginx中使用正则表达式进行灵活配置,安装之前需要确认PCRE已安装。

下载地址:/,使用版本

2) nginx-upstream-jvm-route

nginx_upstream_jvm_route 是一个 Nginx 的扩展模块,用来实现基于 Cookie 的 Session Sticky 的功能。

下载地址(svn): /svn/trunk/

3. 部署结构

安装Nginx、nginx_upstream_jvm_route,实现负载均衡nginx192.168.15.30tomcat1192.168.15.40tomcat2192.168.15.41tomcat3192.168.15.42tomcat..192.168.15.4x配置Tomcat集群,修改,增加jvmRoute,实现session同步

4. 环境安装

4.1 Windows版安装

安装文件为.zip文件,解压缩后,运行目录中的(或使用命令),服务启动。

浏览器中输入:192.168.15.30,出现“Welcome to nginx!”页面,安装成功。

4.2 Linux版安装

 安装说明

本例将nginx安装在/home/apps目录下。

将、文件ftp到/home/apps目录下。

将nginx-upstream-jvm-route文件夹ftp到/home/apps目录下。

 安装步骤

1) PCRE安装

#cd /home/apps

#tar –zxf

#cd pcre-8.12

#./config

#make

#make install

默认安装路径为:/usr/local/lib

2) nginx-upstream-jvm-route安装

#cd /home/apps

#tar –zxf

#mv nginx-0.8.54 nginx-0.8.54-src

#cd nginx-0.8.54-src

# patch -p0 < ../nginx-upstream-jvm-route/jvm_

3) nginx安装

#cd /home/apps/nginx-0.8.54

#./configure --prefix=/home/apps/nginx-0.8.54 --with-http_ssl_module --with-http_gzip_static_module --with-http_stub_status_module --add-module=/home/apps/nginx-upstream-jvm-route

#make

#make install

 启动、验证

#cd /home/apps/nginx-0.8.54/sbin

#./nginx

浏览器中输入:192.168.15.30,出现“Welcome to nginx!”页面,安装成功。

5. Nginx配置

5.1 通用参数配置

1)

worker_processes:指明了nginx要开启的进程数,据官方说法,一般开一个就够了,多开几个,可以减少机器io带来的影响。(网上经验,设置为cpu数的两倍)。

2)

worker_connections:每个工作进程允许最大的同时连接数。

5.2 负载均衡配置

 说明

Nginx使用upstream模块配置负载均衡,upstream目前支持5钟配置方式,每种方式是不同的负载策略,除了这五种外可以使用nginx-upstream-jvm-route扩展模块,在配置部分会针对6中进行示例。

 准备工作

安装nginx-upstream-jvm-route扩展模块。修改tomcat的文件,在“

 配置

1) 轮询(默认)

每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。

upstream

{

}

server 192.168.15.40:8080;

server 192.168.15.41:8081;

2) weight

指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况。weight 默认为越大,负载的权重就越大。

upstream

{

server 192.168.15.40:8080 weight=1;

server 192.168.15.41:8081 weight=2;

}

3) ip_hash

每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题。

upstream

{

}

ip_hash;

server 192.168.15.40:8080;

server 192.168.15.41:8081;

4) fair

按后端服务器的响应时间来分配请求,响应时间短的优先分配。

upstream

{

}

server 192.168.15.40:8080;

server 192.168.15.41:8081;

fair;

5) url

按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,后端服务器为缓存时比较有效。

upstream

{

server 192.168.15.40:8080;

server 192.168.15.41:8081;

hash $request_uri;

hash_method crc32;

}

nginx-upstream-jvm-route

Nginx 的扩展模块,用来实现基于 Cookie 的 Session Sticky 的功能。

6)

upstream

{

}

server 192.168.15.40:8080 srun_id=tomcat1;

server 192.168.15.41:8081 srun_id=tomcat2;

jvm_route $cookie_JSESSIONID|sessionid reverse;

5.3 SSL模块配置

准备证书,使用openssl将p12文件导出服务器证书文件、服务器私钥文件、客户证书的签发证书(CA证书)。见openssl命令。

 说明

Nginx可是实现SSL的配置,实现单向和双向认证,并能够验证证书的状态。

 准工作

配置单项SSL需要准备服务器证书文件和私钥文件,配置双向SSL还需要准备用户证书的签发证书。

CA服务器证书文件为p12格式(nginx不能配置p12格式?),需将p12格式转化为crt/cer、key文件格式。使用openssl做转换,命令如下:

openssl pkcs12 -in -nodes -nocerts -out

openssl pkcs12 -in -nodes -nokeys -clcerts -out

openssl pkcs12 -in -nodes -nokeys -clcerts -out

 配置HTTPS

修改文件,配置HTTPS模块,配置如下:

server {

listen 443;

server_name localhost;

ssl on;

ssl_certificate ;

ssl_certificate_key ;

ssl_client_certificate ;#双向认证

ssl_verify_client on; #双向认证

ssl_session_timeout 5m;

ssl_protocols SSLv2 SSLv3 TLSv1;

ssl_ciphers ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP;

ssl_prefer_server_ciphers on;

location /XXXX_center/ {

proxy_pass 192.168.15.40/XXXX_center/;

proxy_set_header X-Real-IP $remote_addr;

proxy_set_header SSL_CERT $ssl_client_cert;

proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

}

location / {

root html;

index ;

}

}

 注意

1、

2、

Nginx配置了SSL后,tomcat不需要再配置SSL,因为代理转向地址为http而非https,如:proxy_pass 192.168.15.30/XXXX_center/;

Nginx配置SSL后,web服务器部署的应用不能再获取到用户证书,而服务器平台必须要拿到用户证书进行业务验证。这就需要nginx将用户证书透传到web服务器,在这里将用户证书添加到http头中,应用从http头获取用户证书,达到透传的目的,如:proxy_set_header SSL_CERT

$ssl_client_cert;

5.4 静态文件配置

 说明

Nginx可处置静态文件,应用服务器只处理动态文件,提高访问和处理能力。

 准备工作

将静态文件放入nginx服务器:在nginx目录下创建web目录,将XXXX_center下的XXXX_center/static/sj和XXXX_center/static/smpush文件放入web目录,目录结构为:XXXX_center/static/sj、/nginx-0.8.54/web/XXXX_center/static/smpush。

 配置

location ~ .(css|js){

root web;#将应用的静态内容放入web目录下

expires 1h;

}

 注意

1、 过滤条件根据需求改变表达式即可。

2、 Tomcat下发布的XXXX_center应用不需要在包含静态文件,只需维护nginx的静态文件即可。

5.5 监控模块

 说明

 配置

location ~ ^/NginxStatus{

stub_status on;

}

 监控信息

输入nginx的URL:192.168.15.30/NginxStatus,显示如下内容:

Active connections: 70

server accepts handled requests

14553819 14553819 19239266

Reading: 0 Writing: 3 Waiting: 67

active connections:当前 Nginx

正处理的活动连接数。

server accepts handled requests --

总共处理了 14553819

个连接 ,

成功创建 14553819

次握手 (

证明中间没有失败的 ),

总共处理了 19239266

个请求 (

平均每次握手处理了 1.3

个数据请求 )。

reading -- nginx

读取到客户端的 Header

信息数。

writing -- nginx

返回给客户端的 Header

信息数。

waiting --

开启 keep-alive

的情况下,这个值等于 active - (reading + writing),意思就是 Nginx

已经处理完正在等候下一次请求指令的驻留连接。

6. Tomcat集群配置:

实现多台web服务器的session同步。

6.1 条件

1、 确定nginx 服务器和两台tomcat服务器可以互访,并且两个tomcat机器在一个网段内。

2、 确定两台tomcat host多播已经打开,在Linux机器上可以使用cat /proc/net/dev_mcast检查,如果文件存在基本上就是打开了。

6.2 配置

1、 修改,在其中XXXX_center节点后添加,表明此应用与集群服务器复制Session。

2、 修改tomcat的文件,在“

name="Catalina" defaultHost="localhost" jvmRoute="tomcat1">、

defaultHost="localhost" jvmRoute="tomcat2">。

3、 修改tomcat的文件,在“

6.3 验证

在两台tomcat服务器部署的应用中放置文件,在浏览器输入URL:192.168.15.40:8081/XXXX_center/, 输入URL:192.168.15.41:8082/XXXX_center/,两个页面显示出tomcat1和tomcat2上的session值,说明session同步起作用了。参考附录中的文件。

7. Web服务器比较

server

Proxy代理

Rewriter

Fcgi

热部署

系统压力比较

稳定性

安全性

技术支持

静态文件处理

Apache

非常好

不好

不支持

很大

非常好

一般

Nginx

非常好

非常好

支持

很小

非常好

一般

很少

非常好

Lighttpd

一般

一般

非常好

不支持

比较小

不好

一般

一般

Vhosts虚拟主机

反向代理

Session sticky

支持

一般

支持

不支持

非常好

不支持

支持

一般

不支持

8. 附录

8.1 nginx相关命令

#启动

./nginx

#停止

./nginx –s stop

#重新加载

./nginx –s reload

#测试配置文件

./nginx -t

8.2 openssl相关命令

openssl pkcs12 -in -nodes -nocerts -out

openssl pkcs12 -in -nodes -nokeys -clcerts -out

openssl pkcs12 -in -nodes -nokeys -clcerts -out

8.3 nginx配置文件

#user nobody;

worker_processes 1;

#pid logs/;

events {

worker_connections 1024;

}

http {

include ;

default_type application/octet-stream;

#access_log logs/ main;

sendfile on;

#tcp_nopush on;

#keepalive_timeout 0;

keepalive_timeout 65;

gzip on;

proxy_connect_timeout 3s;

upstream

{

}

#ip_hash;

server 192.168.15.40:8080 srun_id=tomcat1;

server 192.168.15.40:8081 srun_id=tomcat2;

jvm_route $cookie_JSESSIONID|sessionid reverse;

server {

listen 80;

server_name localhost;

charset utf-8;

#access_log logs/ main;

location ~ ^/NginxStatus{

}

location /XXXX_center/ {

proxy_pass /XXXX_center/;

proxy_set_header X-Real-IP $remote_addr;

proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

stub_status on;

}

location /provider_demo/ {

proxy_pass /provider_demo/;

proxy_set_header X-Real-IP $remote_addr;

proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

}

location / {

root html;

index ;

}

#error_page 404 /;

# redirect server error pages to the static page /

#

error_page 500 502 503 504 /;

location = / {

root html;

}

}

# HTTPS server

#

server {

listen 443;

server_name localhost;

ssl on;

ssl_certificate ;

ssl_certificate_key ;

ssl_client_certificate ;

ssl_verify_client on;

ssl_session_timeout 5m;

ssl_protocols SSLv2 SSLv3 TLSv1;

ssl_ciphers ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP;

ssl_prefer_server_ciphers on;

#error_page 497 "$host$uri$is_args$args";

location /XXXX_center/ {

proxy_pass /XXXX_center/;

proxy_set_header X-Real-IP $remote_addr;

proxy_set_header SSL_CERT $ssl_client_cert;

proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

}

location /provider_demo/ {

proxy_pass /provider_demo/;

proxy_set_header X-Real-IP $remote_addr;

proxy_set_header SSL_CERT $ssl_client_cert;

proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

}

location / {

root html;

index ;

}

}

}

8.4 文件

<%@ page language="java" import=".*" pageEncoding="UTF-8"%>

<%

%>

tomcat1


<%(sion()) ;%>


<%n(der("Cookie")); %>

Session属性列表:

<%

Enumeration e = (Enumeration) session

.getAttributeNames();

while (eElements()) {

name = ement();

value = () ribute(name);

n(name + " = " + value + "

");

}

%>

<%

%>


ribute("tomcat1:","tomcat------1");


本文标签: 文件 服务器 证书 配置 安装