Nginx
Nginx 是一款高性能的Web服务器软件.
- 具有极高的并发性能
- 利用Nginx与Tomcat组合使用, 搭建反向代理集群
Nginx 反向代理集群可以解决网站的高并发问题!
常见Web Server
开源软件:
- Nginx
- Apache
- Apache Tomcat (Java EE)
- Jetty (Java EE)
商业软件
- Microsoft IIS
- IBM Webspare (Java EE)
- Oracle Weblogic (Java EE)
等
Java EE WEB 服务器也称为 Java WEB 容器.
使用Nginx
1.源码编译安装
参考文档: http://nginx.org/en/docs/configure.html
安装步骤:
-
下载源代码
wget http://nginx.org/download/nginx-1.12.2.tar.gz
-
创建nginx用户
useradd nginx
-
创建 nginx 的安装目标目录
mkdir /usr/local/nginx
-
安装编译时候需要的依赖包(可选)
yum -y install pcre-devel openssl openssl-devel
-
释放并且编译
tar -zxf nginx-1.12.2.tar.gz
cd nginx-1.12.2
./configure --prefix=/usr/local/nginx --user=nginx
–with-http_ssl_module
make
make install
6.启动:
/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
关闭:
/usr/local/nginx/sbin/nginx -t -c /usr/local/nginx/conf/nginx.conf
7.检查进程
ps -A|grep nginx
测试, 用浏览器访问
http:/192.168.17.70
Nginx 的配置文件结构
Nginx的功能是通过配置文件实现的, 使用Nginx就是会使用Nginx的配置文件.
nginx配置文件位置:
- 编译安装版本
- /usr/local/nginx/conf/nginx.conf
- yum安装版本
- /etc/nginx/nginx.conf
Nginx配置文件结构
通用(全局)配置参数
http{
http 协议通用参数
server{
虚拟机配置参数
}
server{
虚拟机配置参数
}
}
全局通用参数
-
worker_processes
建议按照处理器数量进行设置, 4处理器设置为4
worker_processes 1;
-
每个进程的线程数量, 就是进程中线程池的大小.
events { worker_connections 1024; }
-
pid 文件用于存储 Nginx 主进程号
-
日志文件, 如果打开可以记录日志,但同时服务器的性能也会下降
http通用参数
-
ContentType 类型映射, 也就是多媒体文件类型映射.
include mime.types; default_type application/octet-stream;
使用include指令简化主配置文件.
-
keepalive 指定HTTP/1.1 协议时候的服务器端的长连接等待超时时间
keepalive_timeout 65;
-
对服务器的响应进行gzip压缩传输, 可以节省网络流量. 但是问题有两个, 一个是老旧浏览器(IE6)不支持, 第二个会占用服务器的处理器.
gzip on;
更新 Nginx配置文件实验
cd /usr/local/nginx/conf
cp nginx.conf nginx.conf.2018.5.3
vim nginx.conf //开放 http 访问日志, 开放gzip压缩
//测试配置文件
nginx -t -c /usr/local/nginx/conf/nginx.conf
//热加载配置文件: 不停止nginx服务的情况下加载配置文件
nginx -s reload
用浏览器进行测试
查看 nginx/logs/access.log 日志文件
2.虚拟主机(个人理解:正向代理,分配私有ip)
在一个Web服务器上通过服务器软件模拟多台Web 服务器, 其中每个虚拟的Web服务器称为一个虚拟主机. 虚拟主机的好处是可以充分复用同一个web服务器. 对于用户来说, 用户感觉是多个网站.
Nginx 配置文件中 每个 server{} 块对应一个虚拟主机
虚拟主机有3种:
- 基于域名的虚拟主机(最常用的虚拟主机)
- 需要为服务器指定多个域名
- 域名资源解析方便, 便于用户记忆, 用户体验好.
- 基于IP虚拟主机
- 需要为服务器指定多个IP地址
- 需要租用IP
- 很少使用这种方式
- 基于端口的虚拟主机
- 绑定到服务器的多个端口
- 默认80端口只有一个
- 使用其他端口号提供服务, 因为用户需要记忆端口, 用户的体验差
2.1配置虚拟主机具体步骤:
1.本地解析域名实验
cd /etc
cp hosts hosts.2018.5.3
ping t1.canglaoshi.org //不通
vim hosts 添加 10.7.11.19 t1.canglaoshi.org
添加 10.7.11.19 t2.canglaoshi.org
测试是否可以建立连接:
ping t1.canglaoshi.org //通了 结束命令 Ctrl + C
ping t2.canglaoshi.org //通了
windows 实验
用记事本编辑: C:\Windows\System32\drivers\etc\hosts
notepad hosts
添加 10.7.11.19 t1.canglaoshi.org
添加 10.7.11.19 t2.canglaoshi.org
测试是否可以建立连接:
ping t1.canglaoshi.org 通了
ping t2.canglaoshi.org 通了
2.搭建Nginx基于域名的虚拟主机
2.1在Nginx文件下对 nginx.conf文件进行编辑:
在原有的server上面进行添加t1和t2内容:
server {
listen 80;
server_name localhost;
# 请求 t1.canglaoshi.org 访问 t1文件夹 index.html文件
server{
listen 80;
server_name t1.canglaoshi.org;
location / {
root t1;
index index.html;
}
}
# 请求 t2.canglaoshi.org 访问 t2文件夹 index.html文件
server{
listen 80;
server_name t2.canglaoshi.org;
location / {
root t2;
index index.html;
}
}
2.2在Nginx文件夹/usr/local/nginx中添加t1和t2文件夹,并添加两个index.html文件
<html>
<body>
<h1>Hello t1.canglaosho.org</h1>
</body>
</html>
2.3测试:
平滑重启:/usr/local/nginx/sbin/nginx -s reload
最后测试:
http://t1.canglaoshi.org 对应域名
http://t2.canglaoshi.org
3.Nginx反向代理集群
个人理解:正向代理指的是多个客户端通过分配的私网ip访问一个代理服务器,这个代理服务器拥有一个公网ip,然后去访问互联网或者某个被墙的网站。反向代理一般是用作服务器集群,用户通过一个公网ip在浏览器上进行访问,然后请求会发到具体的Nginx服务器上,然后这个Nginx服务器只负责处理请求,并不处理数据,所以会将一个个的请求转发到具体的私网Tomcat服务器上进行处理,最后返回响应。
下图为正向与反向代理图:
下图为:Nginx集群部署图
反向代理集群的优势是提高网站整体的并发处理能力.
3.1配置使用反向代理
配置步骤
-
进行合理的规划: 规定每个服务器所扮演的角色.
-
本地客户端添加新的域名解析
-
配置每个Tomcat应用服务器, 并且启动测试.
装好JDK和Tomcat后,在apache-tomcat-7.0.96/webapps/ROOT/index.jsp文件中,
在后面加上ip后缀,进行标记。
-
配置Nginx服务器, 对nginx文件夹中的Nginx.conf文件进行编辑,
4.1.在 #gzip on;之下,加上文件的引入: include tts.conf;
4.2.然后在添加一个tts.conf文件和内容, -
配置好之后
关闭 : /usr/local/nginx/sbin/nginx -t -c /usr/local/nginx/conf/nginx.conf
开启: /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
平滑启动:/usr/local/nginx/sbin/nginx -s reload -
客户端浏览器访问域名, 可以看到多台Tomcat为一个域名服务
参考的 demo.conf
upstream toms{
server 10.7.11.218:8080;
server 10.7.11.244:8080;
server 10.7.11.43:8080;
}
server{
listen 80;
server_name nick.org;
location / {
proxy_pass http://toms;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;
proxy_max_temp_file_size 0;
proxy_connect_timeout 90;
proxy_send_timeout 90;
proxy_read_timeout 90;
proxy_buffer_size 4k;
proxy_buffers 4 32k;
proxy_busy_buffers_size 64k;
proxy_temp_file_write_size 64k;
}
}
Nginx 集群的负载均衡策略
一共有四种
-
默认是轮训策略
- 可以增加权重 weight:因为服务器(Tomcat)购买的时间点不同,性能会有所不不同,所以利用权重,也就是weight10、weight20、weight20,权重越大,获得的轮训机会和请求更多。笑的请求少一些,让服务器的有硬件能源充分应用。
-增加权重的具体操作则是在nginx的conf中配置tts.conf文件进行权重配置;
- 可以增加权重 weight:因为服务器(Tomcat)购买的时间点不同,性能会有所不不同,所以利用权重,也就是weight10、weight20、weight20,权重越大,获得的轮训机会和请求更多。笑的请求少一些,让服务器的有硬件能源充分应用。
-
ip_hash ip散列,根据用户的IP地址映射到固定的服务器
-
url_hash 根据URL映射到固定的服务器:
个人添加服务器临时下线问题:
因为我们的软件会经常的升级,然后他升级的话,会将服务器依次下线升级之后,再放上去。
因为一般服务器会有多台在同时运行,所以不用担心,一台服务器down掉会有什么影响,
就这样依次的将服务器下线升级就可以达到整个服务器升级的手段。
具体操作:还是tts.config文件中在具体服务器后面加一个down,升级完成之后,再将down删除,
就可以重新上线啦,
具体代码例子:
server 10.7.11.19:8080 weight=10;
server 10.7.11.19:8080 weight=10 down ;
修改好后,重启nginx:nginx的具体路径 -t
例如一般是:/usr/local/nginx/sbin/nginx -t
/usr/local/nginx/sbin/nginx -s reload
阿里云配置Nginx转发到Tomcat
这里就可以将80和443端口的请求转发到Tomcat的8080端口了.
-
配置Nginx
-
yum安装的nginx配置文件在 /etc/nginx/nginx.conf
-
yum安装的nginx会自动包含 /etc/nginx/conf.d/*.conf, 所以将配置文件放到这个文件夹中就可以自动包含了.
-
添加配置文件 1711.conf:
upstream tomcat{ server 127.0.0.1:8080; } server { listen 80; server_name 1711.canglaoshi.org; index index.html index.jsp; location / { proxy_pass http://tomcat; proxy_redirect off; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504; proxy_max_temp_file_size 0; proxy_connect_timeout 90; proxy_send_timeout 90; proxy_read_timeout 90; proxy_buffer_size 4k; proxy_buffers 4 32k; proxy_busy_buffers_size 64k; proxy_temp_file_write_size 64k; } } server{ listen 80; server_name tom.canglaoshi.org; return 301 https://tom.canglaoshi.org; } server{ listen 443; server_name tom.canglaoshi.org; ssl on; index index.html index.jsp; ssl_certificate cert/214462831460580.pem; ssl_certificate_key cert/214462831460580.key; ssl_session_timeout 5m; ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_prefer_server_ciphers on; location / { proxy_pass http://tomcat; proxy_redirect off; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504; proxy_max_temp_file_size 0; proxy_connect_timeout 90; proxy_send_timeout 90; proxy_read_timeout 90; proxy_buffer_size 4k; proxy_buffers 4 32k; proxy_busy_buffers_size 64k; proxy_temp_file_write_size 64k; } }
配置了2个域名 其中 tom.canglaoshi.org 绑定了ssl证书
-
-
测试 重新启动nginx
-
在阿里云的dns解析中解析 两个域名tom.canglaoshi.org, 1711.canglaoshi.org 到服务器ip
-
测试: 用浏览器访问这两个域名.