Nginx---反向代理,负载均衡

 Nginx部分功能概述:

__HTTP基础功能:__

  • 处理静态文件,索引文件以及自动索引;
  • 反向代理加速(无缓存),简单的负载均衡和容错;
  • FastCGI,简单的负载均衡和容错;
  • 模块化的结构。过滤器包括gzipping, byte ranges, chunked responses, 以及 SSI-filter 。在SSI过滤器中,到同一个 proxy 或者 FastCGI 的多个子请求并发处理; 
  • SSL 和 TLS SNI 支持;

__其他HTTP功能:__

  • 基于IP 和名称的虚拟主机服务;
  • Memcached 的 GET 接口;
  • 支持 keep-alive 和管道连接;
  • 灵活简单的配置;
  • 重新配置和在线升级而无须中断客户的工作进程;
  • 可定制的访问日志,日志写入缓存,以及快捷的日志回卷;
  • 4xx-5xx 错误代码重定向;
  • 基于 PCRE 的 rewrite 重写模块;
  • 基于客户端 IP 地址和 HTTP 基本认证的访问控制;
  • PUT, DELETE, 和 MKCOL 方法;
  • 支持 FLV (Flash 视频);
  • 带宽限制;

Nginx的优势:

Nginx 是一个高性能的 Web 和反向代理服务器, 它具有有很多非常优越的特性:

作为 Web 服务器:相比 Apache,Nginx 使用更少的资源,支持更多的并发连接,体现更高的效率,这点使 Nginx 尤其受到虚拟主机提供商的欢迎。能够支持高达 50,000 个并发连接数的响应,感谢 Nginx 为我们选择了 epoll and kqueue 作为开发模型.

作为负载均衡服务器:Nginx 既可以在内部直接支持 Rails 和 PHP,也可以支持作为 HTTP代理服务器 对外进行服务。Nginx 用 C 编写, 不论是系统资源开销还是 CPU 使用效率都比 Perlbal 要好的多。

作为邮件代理服务器: Nginx 同时也是一个非常优秀的邮件代理服务器(最早开发这个产品的目的之一也是作为邮件代理服务器),Last.fm 描述了成功并且美妙的使用经验。

Nginx 安装非常的简单,配置文件 非常简洁(还能够支持perl语法),Bugs非常少的服务器: Nginx 启动特别容易,并且几乎可以做到7*24不间断运行,即使运行数个月也不需要重新启动。你还能够在 不间断服务的情况下进行软件版本的升级。

Nginx的安装:

nginx可以使用各平台的默认包来安装,本文是介绍使用源码编译安装,包括具体的编译参数信息。

正式开始前,编译环境gcc g++ 开发库之类的需要提前装好。

配置编译环境
[root@server1 ~]# yum install -y gcc gcc-c++ 
解除依赖
[root@server1 ~]# yum install -y pcre-devel openssl-devel

 Nginx 一般有两个版本,分别是稳定版和开发版,可以根据您的目的来选择这两个版本的其中一个

源码包可以从官网下载:http://nginx.org/download/nginx-1.14.0.tar.gz

源码编译过程:

[root@server1 ~]# mkdir -p /usr/local/nginx
[root@server1 ~]# cd /usr/local/nginx/
[root@server1 nginx]# ls
[root@server1 nginx]# mv /root/nginx-1.14.0.tar.gz .
[root@server1 nginx]# ls
nginx-1.14.0.tar.gz
[root@server1 nginx]# tar zxf nginx-1.14.0.tar.gz 
[root@server1 nginx]# ls
nginx-1.14.0  nginx-1.14.0.tar.gz
[root@server1 nginx]# cd nginx-1.14.0
[root@server1 nginx-1.14.0]# ls
auto     CHANGES.ru  configure  html     man     src
CHANGES  conf        contrib    LICENSE  README
[root@server1 nginx-1.14.0]# ./configure --sbin-path=/usr/local/nginx/nginx --conf-path=/usr/local/nginx/nginx.conf --pid-path=/usr/local/nginx/nginx.pid --with-http_ssl_module --with-http_stub_status_module --with-threads --with-file-aio
[root@server1 nginx-1.14.0]# make
[root@server1 nginx-1.14.0]# make install

 

 表示./configure...成功

表示make成功

表示make install 成功

nginx编译选项

make是用来编译的,它从Makefile中读取指令,然后编译。

make install是用来安装的,它也从Makefile中读取指令,安装到指定的位置。

configure命令是用来检测你的安装平台的目标特征的。它定义了系统的各个方面,包括nginx的被允许使用的连接处理的方法,比如它会检测 你是不是有CC或GCC,并不是需要CC或GCC,它是个shell脚本,执行结束时,它会创建一个Makefile文件。nginx的 configure命令支持以下参数:

--prefix=path    定义一个目录,存放服务器上的文件 ,也就是nginx的安装目录。默认使用 /usr/local/nginx.
--sbin-path=path    设置nginx的可执行文件的路径,默认为  prefix/sbin/nginx.
--conf-path=path    设置在nginx.conf配置文件的路径。nginx允许使用不同的配置文件启动,通过命令行中的-c选项。默认为prefix/conf/nginx.conf.
--pid-path=path    设置nginx.pid文件,将存储的主进程的进程号。安装完成后,可以随时改变的文件名 , 在nginx.conf配置文件中使用 PID指令。默认情况下,文件名 为prefix/logs/nginx.pid.
--error-log-path=path    设置主错误,警告,和诊断文件的名称。安装完成后,可以随时改变的文件名 ,在nginx.conf配置文件中 使用 的error_log指令。默认情况下,文件名 为prefix/logs/error.log.
--http-log-path=path    设置主请求的HTTP服务器的日志文件的名称。安装完成后,可以随时改变的文件名 ,在nginx.conf配置文件中 使用 的access_log指令。默认情况下,文件名 为prefix/logs/access.log.
--user=name    设置nginx工作进程的用户。安装完成后,可以随时更改的名称在nginx.conf配置文件中 使用的 user指令。默认的用户名是nobody.
--group=name    设置nginx工作进程的用户组。安装完成后,可以随时更改的名称在nginx.conf配置文件中 使用的 user指令。默认的为非特权用户.
--with-select_module --without-select_module    启用或禁用构建一个模块来允许服务器使用select()方法。该模块将自动建立,如果平台不支持的kqueue,epoll,rtsig或/dev/poll.
--with-poll_module --without-poll_module    启用或禁用构建一个模块来允许服务器使用poll()方法。该模块将自动建立,如果平台不支持的kqueue,epoll,rtsig或/dev/poll.
--without-http_gzip_module    不编译压缩的HTTP服务器的响应模块。编译并运行此模块需要zlib库.
--without-http_rewrite_module    不编译重写模块。编译并运行此模块需要PCRE库支持.
--without-http_proxy_module    不编译http_proxy模块.
--with-http_ssl_module    使用https协议模块。默认情况下,该模块没有被构建。建立并运行此模块的OpenSSL库是必需的.
--with-pcre=path    设置PCRE库的源码路径。PCRE库的源码(版本4.4 - 8.30)需要从PCRE网站下载并解压。其余的工作是Nginx的./configure和make来完成。正则表达式使用在location指令和 ngx_http_rewrite_module 模块中.
--with-pcre-jit    编译PCRE包含“just-in-time compilation”(1.1.12中, pcre_jit指令)
--with-zlib=path    设置的zlib库的源码路径。要下载从 zlib(版本1.1.3 - 1.2.5)的并解压。其余的工作是Nginx的./configure和make完成。ngx_http_gzip_module模块需要使用zlib.
 

 启动:

确保系统的 80 端口没被其他程序占用,运行/usr/local/nginx/nginx 命令来启动 Nginx,这里创建软连接来启动

[root@server1 nginx-1.14.0]# netstat -antlp
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address               Foreign Address             State       PID/Program name   
tcp        0      0 0.0.0.0:22                  0.0.0.0:*                   LISTEN      892/sshd            
tcp        0      0 127.0.0.1:25                0.0.0.0:*                   LISTEN      968/master          
tcp        0      0 172.25.100.1:22             172.25.100.250:43642        ESTABLISHED 1750/sshd           
tcp        0      0 :::22                       :::*                        LISTEN      892/sshd            
tcp        0      0 ::1:25                      :::*                        LISTEN      968/master    

[root@server1 nginx-1.14.0]# ln -s /usr/local/nginx/nginx /sbin/nginx
[root@server1 nginx-1.14.0]# nginx 

 测试: 

出现如下界面则安装成功

编辑一个测试页面

[root@server1 html]# pwd
/usr/local/nginx/html
[root@server1 html]# vim test.html
[root@server1 html]# cat test.html 
<h1> server1 <h1>

再次访问

nginx实现负载均衡

修改nginx的配置文件

[root@server1 nginx]# vim nginx.conf

2 user nginx nginx;    # 使用的用户和组     
3 worker_processes  1;    # 指定工作衍生进程数(一般等于cpu总核数或2倍)

12 events {
13     worker_connections  65535;
14 }    # 允许的连接数

17 http {
18         upstream linux{
19         server 172.25.100.2:80;
20         server 172.25.100.3:80;
21         }    # 定义一个轮询组linux(名称自取)

36     server {
37         listen       80;
38         server_name  www.linux.com;    # 监听80端口,定义链接,定义之后可以使用网址访问

44         location / {
45         proxy_pass http://linux;    # 设置代理指向,指向linux轮询组

[root@server1 nginx]# nginx -t
nginx: the configuration file /usr/local/nginx/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/nginx.conf test is successful

[root@server1 nginx]# nginx -s reload

开启server2及server3的httpd服务,并编辑好index.html索引文件

 测试:

添加物理机解析

[root@foundation152 nginx-rpm]# vim /etc/hosts
    172.25.100.1 server1 www.linux.com

输入网址(www.linux.com)测试:

Ip_hash的设置

Nginx中的ip_hash功能能够将客户端的请求定向到同一台后端web机器中,可以使客户端和某个后端 web机器就能建立起稳固的连接,直到此后端web服务器down掉。

配置很简单
[root@server1 nginx]# vim nginx.conf
 17 http {
 18         upstream linux{
 19         server 172.25.100.2:80;
 20         server 172.25.100.3:80;
 21         ip_hash;

[root@server1 nginx]# nginx -t
nginx: the configuration file /usr/local/nginx/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/nginx.conf test is successful
[root@server1 nginx]# nginx -s reload

测试:

关闭server2的httpd服务测试:

自动切换至另一台服务器并持续连接

weight(权重)的设置:

可以自定义轮询次数,配置及效果如下

 [root@server1 nginx]# vim nginx.conf
 17 http {
 18         upstream linux{
 19         server 172.25.100.2:80 weight=4;
 20         server 172.25.100.3:80;
 21         }

[root@server1 nginx]# nginx -t
nginx: the configuration file /usr/local/nginx/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/nginx.conf test is successful
[root@server1 nginx]# nginx -s reload

健康检查:

当server2及server3都down掉后,将指向本机的8080端口

开启本机的httpd服务,并更改默认发布端口为8080,编写发布文件

[root@server1 nginx]# vim nginx.conf
17 http {
 18         upstream linux{
 19         server 172.25.100.2:80;
 20         server 172.25.100.3:80;
 21         server 127.0.0.1:8080 backup;

[root@server1 nginx]# nginx -t
nginx: the configuration file /usr/local/nginx/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/nginx.conf test is successful
[root@server1 nginx]# nginx -s reload

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
完整版:https://download.csdn.net/download/qq_27595745/89522468 【课程大纲】 1-1 什么是java 1-2 认识java语言 1-3 java平台的体系结构 1-4 java SE环境安装和配置 2-1 java程序简介 2-2 计算机中的程序 2-3 java程序 2-4 java类库组织结构和文档 2-5 java虚拟机简介 2-6 java的垃圾回收器 2-7 java上机练习 3-1 java语言基础入门 3-2 数据的分类 3-3 标识符、关键字和常量 3-4 运算符 3-5 表达式 3-6 顺序结构和选择结构 3-7 循环语句 3-8 跳转语句 3-9 MyEclipse工具介绍 3-10 java基础知识章节练习 4-1 一维数组 4-2 数组应用 4-3 多维数组 4-4 排序算法 4-5 增强for循环 4-6 数组和排序算法章节练习 5-0 抽象和封装 5-1 面向过程的设计思想 5-2 面向对象的设计思想 5-3 抽象 5-4 封装 5-5 属性 5-6 方法的定义 5-7 this关键字 5-8 javaBean 5-9 包 package 5-10 抽象和封装章节练习 6-0 继承和多态 6-1 继承 6-2 object类 6-3 多态 6-4 访问修饰符 6-5 static修饰符 6-6 final修饰符 6-7 abstract修饰符 6-8 接口 6-9 继承和多态 章节练习 7-1 面向对象的分析与设计简介 7-2 对象模型建立 7-3 类之间的关系 7-4 软件的可维护与复用设计原则 7-5 面向对象的设计与分析 章节练习 8-1 内部类与包装器 8-2 对象包装器 8-3 装箱和拆箱 8-4 练习题 9-1 常用类介绍 9-2 StringBuffer和String Builder类 9-3 Rintime类的使用 9-4 日期类简介 9-5 java程序国际化的实现 9-6 Random类和Math类 9-7 枚举 9-8 练习题 10-1 java异常处理 10-2 认识异常 10-3 使用try和catch捕获异常 10-4 使用throw和throws引发异常 10-5 finally关键字 10-6 getMessage和printStackTrace方法 10-7 异常分类 10-8 自定义异常类 10-9 练习题 11-1 Java集合框架和泛型机制 11-2 Collection接口 11-3 Set接口实现类 11-4 List接口实现类 11-5 Map接口 11-6 Collections类 11-7 泛型概述 11-8 练习题 12-1 多线程 12-2 线程的生命周期 12-3 线程的调度和优先级 12-4 线程的同步 12-5 集合类的同步问题 12-6 用Timer类调度任务 12-7 练习题 13-1 Java IO 13-2 Java IO原理 13-3 流类的结构 13-4 文件流 13-5 缓冲流 13-6 转换流 13-7 数据流 13-8 打印流 13-9 对象流 13-10 随机存取文件流 13-11 zip文件流 13-12 练习题 14-1 图形用户界面设计 14-2 事件处理机制 14-3 AWT常用组件 14-4 swing简介 14-5 可视化开发swing组件 14-6 声音的播放和处理 14-7 2D图形的绘制 14-8 练习题 15-1 反射 15-2 使用Java反射机制 15-3 反射与动态代理 15-4 练习题 16-1 Java标注 16-2 JDK内置的基本标注类型 16-3 自定义标注类型 16-4 对标注进行标注 16-5 利用反射获取标注信息 16-6 练习题 17-1 顶目实战1-单机版五子棋游戏 17-2 总体设计 17-3 代码实现 17-4 程序的运行与发布 17-5 手动生成可执行JAR文件 17-6 练习题 18-1 Java数据库编程 18-2 JDBC类和接口 18-3 JDBC操作SQL 18-4 JDBC基本示例 18-5 JDBC应用示例 18-6 练习题 19-1 。。。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值