目录
准备工作
安装Nginx及相关组件
a、yum安装:
b、tar安装:
c、也可以yum安装pcre、zlib、openssl,tar安装nginx
启动Nginx
简单配置Nginx
Nginx配置静态web服务器
Nginx实现负载均衡(不要使用刷新按钮,在地址栏回车)
1.负载均衡策略
2.配置Nginx的负载均衡与分发策略
Nginx其他配置
总结
Nginx和Apache的区别:
下载或使用yum安装:
wget --no-check-certificate http://www.openssl.org/source/openssl-fips-2.0.10.tar.gz
wget http://zlib.net/zlib-.2.11.tar.gz
wget ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-8.40.tar.gz
wget http://nginx.org/download/nginx-1.10.2.tar.gz
安装c++编译环境,如已安装可略过
yum install gcc-c++
yum -y install gcc gcc-c++
查看内核版本
cat /proc/version
查看系统位数
getconf WORD_BIT
查看gcc版本
gcc --version
https://blog.csdn.net/weixin_42389270/article/details/121553361
yum -y install pcre pcre-devel zlib zlib-devel openssl openssl-devel
在线安装
yum -y install gcc gcc-c++ 或者 yum install gcc-c++
yum -y install pcre pcre-devel
yum -y install zlib zlib-devel
yum -y install openssl openssl-devel
yum -y install nginx(如果使用该命令要新建配置/etc/yum.repos.d/nginx.repo)
[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/centos/7.5/$basearch/
gpgcheck=0
enabled=1
openssl安装
[root@localhost src]# tar zxvf openssl-fips-2.0.10.tar.gz
[root@localhost src]# cd openssl-fips-2.0.10
[root@localhost openssl-fips-2.0.10]# ./config && make && make install
pcre安装
[root@localhost src]# tar zxvf pcre-8.43.tar.gz
[root@localhost src]# cd pcre-8.43
[root@localhost pcre-8.40]# ./configure && make && make install
zlib安装
[root@localhost src]# tar zxvf zlib-1.2.11.tar.gz
[root@localhost src]# cd zlib-1.2.11
[root@localhost zlib-1.2.11]# ./configure && make && make install
nginx安装
[root@localhost src]# tar zxvf nginx-1.16.1.tar.gz
[root@localhost src]# cd nginx-1.16.1
[root@localhost nginx-1.10.2]# ./configure && make && make install
解压后进入到nginx文件
./configure 执行这个命令
产生一个新文件Makefiles
make
make install
cd /usr/local/nginx/sbin
有个命令./nginx
ps -ef|grep nginx
查看nginx安装位置
whereis nginx
进入nginx启动
cd /usr/local/nginx/sbin
./nginx
用ps -aux|grep nginx查看状态
开启端口:
#添加端口
firewall-cmd --zone=public --add-port=80/tcp --permanent(永久)
#查看所有打开的端口:
firewall-cmd --zone=public --list-ports
#重新载入
firewall-cmd --reload
启动成功打开浏览器访问http://localhost可以看到nginx页面
如果报错:error while loading shared libraries: libpcre.so.1: cannot open shared
a.用whereis libpcre.so.1命令找到libpcre.so.1在哪里
b.用ln -s /usr/local/lib/libpcre.so.1 /lib64 命令做个软连接就可以了
c.用./nginx启动Nginx
nginx的基本操作:
启动
/usr/local/nginx/sbin/nginx
停止/重启
/usr/local/nginx/sbin/nginx -s stop(停止)|reload(重启)
命令帮助
/usr/local/nginx/sbin/nginx -h
验证配置文件
/usr/local/nginx/sbin/nginx -t
查看状态
ps -aux | grep nginx
配置文件
vi /usr/local/nginx/conf/nginx.conf
打开nginx配置文件,位于nginx目录下的conf文件夹下
设置几个站点:
server {
listen 81;
server_name nginx.test1.com;
location / {
root html;
index index.html index.htm index.jsp;
}
}
server {
listen 82;
server_name nginx.test2.com;
location / {
root html;
index index.html index.htm;
}
}
保存退出重启nginx
Linux配置完毕了,使用另一台电脑而非安装nginx的电脑,如windows系统,配置一下host在
"C:\Windows\System32\drivers\etc"下的hosts中配置一下域名重定向:
192.168.174.131 nginx.test1.com nginx.test2.com
然后测试一下这个域名是否正确指向了这个IP上及端口是否可以访问
telnet nginx.test1.com 81
telnet nginx.test2.com 82
没有问题可以用浏览器访问以上地址
server {
listen 80;
server_name localhost;
access_log /opt/static/log/webroot/access.log;
error_log /opt/static/log/webroot/error.log;
location / {
root /opt/static/webroot;
index index.html;
}
error_page 404 /404.html;
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
1)、轮询
这种是默认的策略,把每个请求按顺序逐一分配到不同的server,如果server挂掉,能自动剔除。
upstream cssl.com {
server 192.168.174.128:8080; (centos6.5 tomcat8)
server 192.168.174.129:8081; (centos7.0 tomcat7)
server 192.168.174.131:8080; (centos7.5 tomcat9)
}
upstream cssl.com {
server 192.168.158.130:8090;
server 192.168.158.131:8090;
server 192.168.158.1:8080;
server 192.168.158.1:8090;
}
如果同一服务器(ip)启动两个tomcat需要修改三个端口8080|8005|8009
2)、最少连接
把请求分配到连接数最少的server
upstream fengzp.com {
least_conn;
server 192.168.99.100:42000;
server 192.168.99.101:42001;
}
3)、权重
使用weight来指定server访问比率,weight默认是1。以下配置会是server2访问的比例是server1的两倍
upstream fengzp.com {
server 192.168.99.100:42000 weight=1;
server 192.168.99.101:42001 weight=2;
}
4)、ip_hash
每个请求会按照访问ip的hash值分配,这样同一客户端连续的Web请求都会被分发到同一server进行处理,可以解决session的问题。如果server挂掉,能自动剔除。
upstream fengzp.com {
ip_hash;
server 192.168.99.100:42000;
server 192.168.99.101:42001;
}
ip_hash可以和weight结合使用。
通过在upstream参数中添加的应用服务器IP后添加指定参数即可实现,如:
upstream tomcatserver {
server 192.168.174.128:8080 weight=3;
server 192.168.174.129:8081;
}
server {
listen 80;
server_name nginx.test.com;
location / {
proxy_pass http://tomcatserver;
}
}
通过以上配置,便可以实现,在访问nginx.test.com这个网站时,由于配置了proxy_pass地址,所有请求都会先通过nginx反向代理服务器,在服务器将请求转发给目的主机时,读取upstream为 tomcatsever的地址,读取分发策略,配置tomcat1权重为3,所以nginx会将大部分请求发送给128服务器上的tomcat1,也就是8080端口;较少部分给tomcat2来实现有条件的负载均衡,当然这个条件就是服务器1、2的硬件指数处理请求能力。
upstream myServer {
server 192.168.72.49:9090 down;
server 192.168.72.49:8080 weight=2;
server 192.168.72.49:6060;
server 192.168.72.49:7070 backup;
}
1)down
表示单前的server暂时不参与负载
2)Weight
默认为1.weight越大,负载的权重就越大
3)max_fails
允许请求失败的次数默认为1.当超过最大次数时,返回proxy_next_upstream 模块定义的错误
4)fail_timeout
max_fails 次失败后,暂停的时间
5)Backup
其它所有的非backup机器down或者忙的时候,请求backup机器。所以这台机器压力会最轻。
使用Nginx的高可用
除了要实现网站的高可用,也就是提供n多台服务器用于发布相同的服务,添加负载均衡服务器分发请求以保证在高并发下各台服务器能相对饱和的处理请求。同样,负载均衡服务器也需要高可用,以防如果负载均衡服务器挂掉了,后面的应用服务器也紊乱无法工作。
实现高可用的方案:添加冗余。添加n台nginx服务器以避免发生上述单点故障。具体方案详见下文:keepalive+nginx实现负载均衡高可用
负载均衡不论是各种软件或硬件(F5:2019.3.12 F5 Networks以 6.7 亿美元的价格收购Nginx)上的解决方案,主要还是将大量的并发请求按照一定的规律分发给不同的服务器处理,从而减少某台服务器的瞬时压力,提高网站的抗并发能力。nginx在负载均衡的应用之所以广泛,笔者认为这归功于它的灵活配置,一个nginx.conf文件解决大部分问题,不论是nignx创建虚拟服务器、nginx的反向代理服务器,还是本文介绍的nginx的负载均衡,几乎都在这个配置文件中进行。服务器上只负责把nginx搭好,跑起来即可。而且它本身轻量级,不需要占用服务器太多资源就可以达到较好的效果。
1. apache 相对于nginx 的优点:
rewrite ,比nginx 的rewrite 强大
动态页面,nginx处理动态请求是鸡肋,一般动态请求要apache去做,nginx只适合静态和反向。
模块超多,基本想到的都可以找到
少bug,nginx的bug相对较多超稳定
2. nginx相对于apache的优点:
轻量级,同样起web 服务,比apache占用更少的内存及资源 ,支持更多的并发连接,体现更高的效率,这点使 Nginx 尤其受到虚拟主机提供商的欢迎。在高连接并发的情况下,Nginx是Apache服务器不错的替代品: Nginx在美国是做虚拟主机生意的老板们经常选择的软件平台之一. 能够支持高达50000 个并发连接数的响应, 这归功于Nginx为我们选择了epoll and kqueue作为开发模型.
高并发,nginx处理请求是异步非阻塞的,而apache 则是阻塞型的,在高并发下nginx 能保持低资源低消耗高性能
高度模块化的设计,编写模块相对简单,社区活跃,各种高性能模块出品迅速
Nginx本身就是一个反向代理服务器
负载均衡能力突出,Nginx既可以在内部直接支持 Rails 和 PHP 程序对外进行服务, 也可以支持作为 HTTP代理 服务器对外进行服务. Nginx采用C进行编写, 不论是系统资源开销还是CPU使用效率都比 Perlbal 要好很多
3. 核心区别:apache是同步多进程模型,一个连接对应一个进程;nginx是异步的,多个连接(万级别)可以对应一个进程