概念
Nginx ("engine x") 是一个高性能的 HTTP 和反向代理服务器,特点是占有内存少,并发能力强,事实上 nginx 的并发能力确实在同类型的网页服务器中表现较好,*使用 nginx网站用户有:百度、京东、新浪、网易、腾讯、淘宝等。。。
Nginx 是高性能的 HTTP 和反向代理的服务器,处理高并发能力是十分强大的,能经受高负载的考验,有报告表明能支持高达 50,000 个并发连接数。
nginx在linux系统中的安装
1.安装gcc依赖
yum -y install make zlib zlib-devel gcc-c++ libtool openssl openssl-devel
2.安装pcre依赖
第一步:解压
tar -xvf pcre-8.37.tar.gz
第二步:进入pcre目录下执行 ./configure
[czf@hadoop01 nginx]$ ls
pcre-8.37 pcre-8.37.tar.gz
[czf@hadoop01 nginx]$ cd pcre-8.37/
[czf@hadoop01 pcre-8.37]$ ./configure
第三步:编译、安装
在该目录下执行 make&&make install命令(注意:make install 需要root权限)
[czf@hadoop01 pcre-8.37]$ make && make install
第四步:查看版本号
[root@hadoop01 pcre-8.37]# pcre-config --version
8.37
3.安装nginx
1.解压压缩包
tar -zxvf
2.进入目录
./configure
3.编译、安装
make && make install
实践过程中遇到的问题:解决方案,参考:https://bbs.huaweicloud.com/blogs/212670
成功的情况下,进入 cd /usr/local 会生成nginx目录,nginx下的sbin目录下有nginx的启动脚本,以及conf下的配置文件
4.nginx的启动
进入 usr/local/nginx/sbin
在哪访问?/usr/local/nginx/conf配置文件里面可以看到绑定的端口为80
关于linux的防火墙的问题
在 windows 系统中访问 linux 中 nginx,默认不能访问的,因为防火墙问题
(1)关闭防火墙
(2)开放访问的端口号,80 端口
查看开放的端口号
firewall-cmd --list-all
设置开放的端口号
firewall-cmd --add-service=http –permanent
firewall-cmd --add-port=80/tcp --permanent
重启防火墙
firewall-cmd –reload
常用命令
进入/usr/local/nginx/sbin
文件夹下
启动
./nginx
停止
./nginx -s stop
重启
./nginx -s reload
nginx配置实例
正向代理
定义:代理的是客户端,进而访问服务端
反向代理
准备工作
虚拟机1:192.168.96.130 tomcat下webapp下创建dev文件夹里面再创建一个html。
虚拟机2:192.168.96.132 同理
1.nginx.conf监听192.168.96.130 的9000端口,如果匹配到了/dev/路径就代理本机ip的8080端口(即:192.168.96.130:8080/dev/),匹配到/vod/同理代理192.168.96.132的8080端口
server {
listen 9000;
server_name 192.168.96.130;
#charset koi8-r;
#access_log logs/host.access.log main;
location ~/dev/{
root html;
proxy_pass http://127.0.0.1:8080;
index index.html index.htm;
}
location ~/vod/{
root html;
proxy_pass http://192.168.96.132:8080;
index index.html index.htm;
}
测试
nginx.conf配置文件location 属性说明
location 中可用的匹配命令有两种:普通字符串和正则表达式。~ 和~* 用于正则表达式,其他前缀和无任何前缀都用于普通字符串。正则表达式会根据匹配顺序,匹配到第一个正则表达式后停止搜索。普通字符串匹配则无视顺序,只会选择最精确的匹配。常用的匹配命令和作用如下:
常用的几种情况
用于动静分离配置静态资源
访问192.168.96.130/images/1.jpg 相当于/home/czf/static/images/1.jpg
#访问.../images 相当于访问 root /home/czf/static/ images/ 这个文件夹(相当于将匹配上路径进行拼接处理)
location /images/ {
root /home/czf/static/;
index index.html index.htm;
}
用于配置反向代理
参考文章:https://blog.csdn.net/foupwang/article/details/89291113
假设站点名字是http://server;如下图所示:前者相当于替换操作,后者相当于拼接操作。
nginx动静分离
准备工作
创建一个文件夹存放静态的资源,2个子文件夹。一个存放html,一个存放图片
配置文件(这里必须得有 user root 否则会报错403 forbidden,启动nginx的用户必须和文件夹创建者相同)
#user nobody;
user root;
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
server {
listen 80;
server_name 192.168.96.130;
#访问.../images 相当于访问 root /home/czf/static/ images/ 这个文件夹
location /images/ {
root /home/czf/static/;
index index.html index.htm;
}
#同理访问.../html 相当于访问 root /home/czf/static/html/ 这个文件夹
location /html/ {
root /home/czf/static/;
index index.html index.htm;
}
测试
nginx负载均衡
准备工作(在上一个实例上修改)
虚拟机1:192.168.96.130 tomcat下webapp下创建dev文件夹里面再创建一个a.html。
虚拟机2:192.168.96.132 同理 也创建一个dev/a.html
修改nginx.conf配置文件
upstream myserver{
server 192.168.96.130:8080;
server 192.168.96.132:8080;
}
server {
listen 9000;
server_name 192.168.96.130;
location / {
root html;
proxy_pass http://myserver;
index index.html index.htm;
}
测试:
nginx的分配策略
配置高可用的nginx集群
keepalived.conf
! Configuration File for keepalived
global_defs {
notification_email {
acassen@firewall.loc
failover@firewall.loc
sysadmin@firewall.loc
}
notification_email_from Alexandre.Cassen@firewall.loc
smtp_server 192.168.200.1
smtp_connect_timeout 30
router_id LVS_DEVEL #LVS_DEVEL 访问的主机名字,在host文件绑定ip。表示运行keepalived服务器的一个标识
vrrp_skip_check_adv_addr
vrrp_strict
vrrp_garp_interval 0
vrrp_gna_interval 0
}
vrrp_script chk_http_port{
script "/usr/local/src/nginx_check.sh"
interval 2 #检测脚本执行的间隔
weight 2
}
vrrp_instance VI_1 {
state MASTER #备份服务器上将MASTER改为BACKUP
interface ens33 #网卡
virtual_router_id 51 #主、备机的virtual_router_id 必须相同
priority 100 #主、备机取不同的优先级,主机值较大,备份机值较小
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress { #虚拟地址
192.168.96.50 #注意虚拟ip必须和虚拟机ip在同一网段,要不然访问不到
}
}
查询网卡
nginx_check.sh
#!/bin/bash
A=`ps -C nginx –no-header |wc -l`
if [ $A -eq 0 ];then
/usr/local/nginx/sbin/nginx
sleep 2
if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then
killall keepalived
fi
fi
准备环境
1、2台已经安装好了的Nginx虚拟机
192.168.96.130
192.168.96.132
2、两台虚拟机安装keepalived
(1)使用 yum 命令进行安装
yum install keepalived –y
(2)安装之后,在 etc 里面生成目录 keepalived,有文件 keepalived.conf
配置
(1)修改/etc/keepalived/keepalivec.conf 配置文件
(2)在/usr/local/src 添加检测脚本nginx_check.sh
(3)把两台服务器上 nginx 和 keepalived 启动
启动 nginx:./nginx
启动 keepalived:systemctl start keepalived.service
在nginx主服务器上 输入ip a命令
问题总结:
当2台虚拟机ip和虚拟ip不是一个网段的时候,浏览器输入虚拟地址是访问不到2个nginx服务器的。
测试
1.浏览器输入虚拟ip
2.将nginx主服务器和keepalived.service(主服务器上的)都停掉,再输入虚拟ip,若还能访问到,说明主从配置成功了。(注意是2个都停掉,只关nginx不起作用,访问不到)
[root@hadoop01 sbin]# ./nginx -s stop
[root@hadoop01 sbin]# systemctl stop keepalived.service
这时候在从服务器上输入 ip a ,和之前主服务器上相同了。