keyfall / xuexibiji

3 stars 0 forks source link

nginx #27

Open keyfall opened 5 years ago

keyfall commented 5 years ago

nginx简介

高性能HTTP和反向代理服务器,特点是占有内存少,并发能强,nginx专为性能优化而开发,性能是其最重要的考量,实现上非常注重效率,能经受高负载,可以支持高达50000个并发连接 主要功能是反向代理,负载均衡,动静分离

安装nginx

正向代理和反向代理

正向代理 客户端要访问一个网站,输入网址后,不能直接到达网址所在的服务器,需要经过一个代理服务器,由代理服务器进行访问 正向代理需要设置一个代理服务器,然后通过代理服务器需要访问哪个网站。

反向代理 客户端对服务器代理无感知的,就是发送一个网址,然后接收到一个页面,而反向代理就是一台服务器,绑定了客户端的域名,收到客户端发来的请求,根据请求(直接域名,或者域名/目录),发送到另一个服务器,获取数据后,返回给客户端,简单意思就是实现一个接受请求,然后分发请求,很方便实现负载均衡,动静分离的功能

正向代理和反向代理区别 图片

负载均衡

单个服务器解决不了,增加服务器的数量,将请求分发到各个服务器上,让之前一个服务器扛不住的请求发到多个服务器上 图片

动静分离

就是把动态页面和静态页面由不同的服务器来解析,加快解析速度 图片

keyfall commented 4 years ago

安装nginx

安装依赖包

apt-get install gcc
apt-get install libpcre3 libpcre3-dev
apt-get install zlib1g zlib1g-dev
# Ubuntu14.04的仓库中没有发现openssl-dev,由下面openssl和libssl-dev替代
#apt-get install openssl openssl-dev
sudo apt-get install openssl 
sudo apt-get install libssl-dev

如果出现版本不一样,直接安装需要的版本就行就行 apt-get install libpcre3=2:8.38-3.1

安装nginx

cd /usr/local
mkdir nginx
cd nginx
wget http://nginx.org/download/nginx-1.13.7.tar.gz
tar -xvf nginx-1.13.7.tar.gz 

编译nginx

# 进入nginx目录
/usr/local/nginx/nginx-1.13.7
# 执行命令
./configure
# 执行make命令
make
# 执行make install命令
make install

启动nginx

#进入nginx启动目录
cd /usr/local/nginx/sbin
# 启动nginx
./nginx

上面用的是安装包方法,下面使用apt下载(我是没成功)

sudo su root
apt-get install nginx

参考地址:https://blog.csdn.net/qq_23832313/article/details/83578836

卸载nginx

sudo apt-get remove nginx nginx-common # 卸载删除除了配置文件以外的所有文件。

sudo apt-get purge nginx nginx-common # 卸载所有东东,包括删除配置文件。

sudo apt-get autoremove # 在上面命令结束后执行,主要是卸载删除Nginx的不再被使用的依赖包。

sudo apt-get remove nginx-full nginx-common #卸载删除两个主要的包。

netstat -ntlp查看进程

keyfall commented 4 years ago

nginx常用命令

操作命令前,需要进入nginx目录 cd /usr/local/nginx/sbin

查看版本号 ./nginx -v

关闭nginx ./nginx -s stop

开启nginx ./nginx -s reload

查看nginx.conf nginx -t

keyfall commented 4 years ago

nginx的配置文件

位置是/usr/local/nginx/conf/nginx.conf 图片 三部分: 第一部分 全局块 从配置文件开始到events块之间的内容,主要设置一些影响nginx服务器整体运行的配置指令 图片 worker_processes 1; worker_processes值越大,可以支持的并发处理量也越多

第二部分 events块 events块涉及的指令主要影响nginx服务器与用户的网络连接 图片

第三部分 http块

keyfall commented 4 years ago

centos 7中nginx的基本使用 nginx配置文件详解 nginx配置文件详解另一份 image

keyfall commented 4 years ago

nginx实战 准备 安装一个tomcat,8.5版本以后就没有登录界面了,可以创建dockerfile进行设置添加 Ubuntu常用防火墙命令 对外开放访问端口 firewall-cmd --add-port=8080/tcp --permanent firewall-cmd --reload

查看已经开放的端口号 firewall-cmd --list-all

反向代理实例1:浏览器输入www.123.com,跳转到linux系统tomcat主页面中 image nginx配置 这里新建/etc/nginx/conf.d/usetomcat.conf image server_name 是虚拟机的ip proxy_pass是虚拟机内的地址 8080被tomcat占用 浏览器进入10.4.7.55,在被proxy_pass转发到127.0.0.1:8080

反向实例2:通过一个域名,根据不同的目录进入两个不同的网站地址(这可以分为手机端和电脑端吧) tomcat方面 建立两个文件夹tomcat8080,tomcat8081,各解压一个tomcat 8081中/ceshi/tomcat8081/apache-tomcat-8.5.51/conf,这个conf文件夹修改server.xml,把里面的port改一下 image image Connector标签的port改成8081

创建nginx中server实例规则 新建/etc/nginx/conf.d/tworedirectfordir.conf

server {
        listen 9001;
        server_name 10.4.7.55;
        location ~ /edu/ {
                proxy_pass http://127.0.0.1:8080;
        }
        location ~ /vod/ {
                proxy_pass http://127.0.0.1:8081;
        }
}

监听9001,10.4.7.55:9001进入 /edu/进入8080的tomcat的webapps/edu /vod/进入8081的vod

最后在各自的tomcat的webapps中新建对应的edu或者vod目录,放入一个html /ceshi/tomcat8080/apache-tomcat-8.5.51/webapps/edu

测试 image

负载均衡

把请求进行分发到不同的服务器中,使每个服务器的请求减少,压力减少

tomcat方面 在8080新建vod文件夹放入a.html文件 令两个tomcat路径相同

nginx配置 使用80端口,直接修改usetomcat.conf

upstream myserver{
        server 10.4.7.55:8080 weight=4;
        server 10.4.7.55:8081 weight=2;

}
server{
        listen 80;
        server_name 10.4.7.55;
        location / {
                root html;
                proxy_pass http://myserver;
                index index.html index.htm;
        }
}

测试:输入http://10.4.7.55/vod/a.html,持续刷新,会发现显示不同的tomcat中的html中的内容 image

动静分离

就是把动态请求和静态请求分开 nginx处理静态,tomcat处理动态

新建/data/image,里面放入一个张图一个页面都可以 nginx设置

server{
        listen 80;
        server_name 10.4.7.55;
        location /www/ {
                root html;
                proxy_pass http://127.0.0.1:8080;
                index index.html index.htm;
        }
        location /image/ {
                root /data/;
                autoindex on;
                expires 3d;
        }
}

tomcat处理动态,感觉这么写可以 root /data/意思是根目录是/data,地址写成http://10.4.7.55/image/1.jpg就可以,data是image的上级目录,这里不能写成data/(不能少了前面的/),代表的路径不同,少了/,不能访问,就是可以进入系统根目录,不能进入当前用户主目录,后面的/带不带没问题 autoindex on 意思是显示目录,http://10.4.7.55/image/,这时候会以目录形式显示image目录下的内容,如果把image删除了,就不能看了 expires 3d,意思是内容缓存3天,但是没有访问过的文件就访问不到了

和root对应的还有一个alias,alias是准确目录,准确体现在location对应的path目录(/image/)后面的/,如果没有加,那输入url地址时加不加都没关系,如果加了/,那输入url的时候image后面也必须有/,否则访问不了

测试:输入http://10.4.7.55/image/1.jpg,然后删除image目录,再访问,还是能访问到

keyfall commented 4 years ago

nginx案例 安装第三方软件

keyfall commented 4 years ago

ubuntu 设置网络 ip addr的时候没有ip(这是弄好的) image 设置ip,子网掩码,网关 sudo vim /etc/network/interfaces image 设置DNS sudo vim /etc/systemd/resolved.conf image 重启 sudo service network-manager restart

keyfall commented 4 years ago

Ubuntu 18.0.4部署Tomcat 安装JDK

安装jdk8 sudo apt-get install openjdk-8-jdk 安装tomcat8 阿里巴巴镜像下载 image 放到usr/local/tomcat目录中 tar -zxvf apache-tomcat-8.5.51.tar.gz 进入bin目录 './startup.sh ' image tomcat启动了,然后浏览器localhost:8080检查一下 关闭tomcat './shutdown.sh' 配置环境 sudo vim startup.sh 在exec "$PRGDIR"/"$EXECUTABLE" start "$@"前面加上以下内容:

export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64
export JRE_HOME=${JAVA_HOME}/jre
export PATH=${JAVA_HOME}/bin:${JRE_HOME}:$PATH
export CLASSPATH=.:${JRE_HOME}/lib/rt.jar:${JAVA_HOME}/lib/dt.jar:${JAVA_HOME}/lib/tools.jar 
export TOMCAT_HOME=/opt/tomcat8/apache-tomcat-8.5.15

JAVA_HOME地址是jdk的地址(按照上面方法装,直接cv就行) 查看jdk地址

对shutdown.sh进行上面一样的操作

然后再打开tomcat,没报错就好了

keyfall commented 4 years ago

dpkg ---- apt-get ------ aptitude 三种方式的区别 及命令格式

keyfall commented 4 years ago

nginx安装到成功的悲惨经历: 我的经历就跟下面的快照图一样 image

第一次 使用docker安装tomcat容器,这里pull,run进行开启,先是下载了tomcat最新版,浏览器死活不出来主页,后来看有人说是tomcat8.5以后默认没有(估计是镜像不行,直接安装包会出来),改了7后就有了主页,安装包安装nginx(这里进行安装包依赖倒是没出什么错),在nginx.conf设置了转发,设置本地ip,死活转发不过去,找半天ip啥的,docker有一个虚拟ip,用了,也没用,弃坑

进行快照恢复,进行第二次 看网上有的说安装完整版啥的,试了,后来报错了,就不用了,然后照上面的issue方法安装jdk,tomcat,成功,安装nginx,先进行了安装包依赖,之前第一次的时候没问题,现在出问题了,说已经安装了,但是安装的版本高于现在要安装的版本,所以需要降级,然后降级查半天,试了aptitude(打死不用这个了),aptitude会把apt-get删除,但是进行降级下载的时候还是会使用apt-get里面的http文件夹(具体在哪里忘了),再恢复0.0,直接apt-get install package=版本,这里=左右不能空格,这才安装好了,后来安装到某个地方,发现图标啥的都没了,想想进行重启,直接generic(命令行版)了,又各种想干了什么,哪里出的错,查到apt-get install zlib1g zlib1g-dev(这里降级的时候删了300个东西,然后就啥都没了,估计都是依赖原版本的东西),进行zlib1g降级(这里降级了回不去了),后来想想如果能运行的话,管他什么generic了,继续下去,结果安装包版nginx弄好了,进行nginx.conf配置,也可以转发了,这里证明docker和nginx别混用(或者需要另外配置,另外docker的tomcat容器和nginx容器还没试过呢),不过重启之后,转发就错了,浏览器的页面变成了error了,这里再进行快照恢复到tomcat安装好,安装nginx,这次使用在线安装,上次使用过,nginx的配置文件配置了没用,这次成功了,找到配置文件了,然后进行配置,还是默认页面,查找配置文件,发现里面有2个include image 两个都查了,一个是空,一个有个defaule(这个可以当范本,怎么写conf),估计就是这个问题,vim后,里面全是default啥的 image 然后把配置文件中include指向default的注释,重启nginx,完美解决了

经过这件事,我觉得进行一切异常操作之前都进行快照,最好不要进行安装包安装,除非有了完整的稳定的版本

keyfall commented 4 years ago

在线安装nginx 基本使用nginx

keyfall commented 4 years ago

linux文件目录

keyfall commented 4 years ago

查看所有端口 netstat -ntlp

cd到跳转前的目录 cd -

cd到当前用户主目录 cd cd ~

cd 到系统根目录 cd /

权限数字 4=r,2=w,1=x x是执行

keyfall commented 4 years ago

nginx高可用

image 通过keepalived,保证一台nginx挂掉了,自动转到第二台 通过虚拟ip,使外部访问虚拟ip,再两台nginx中分别绑定虚拟ip,由keepalived去操心挂了

首先安装keepalived,我这里又出现很多的依赖包冲突 apt-get install keepalived QQ截图20200318211510 安装好后,一般在/etc/keepalived文件夹里有keepalived.conf,我这里又没有,还好不使用默认的 如果没有就新建keepalived.conf,有就修改

global_defs {

    notification_email {

        acassen@firewall.loc

        failover@firewall.loc

        sysadmin@firewall.loc

    }

    notification_email_from Alexandre.Cassen@firewall.loc

    smtp_server 192.168.17.129(这里是什么不重要,是邮件的服务器)

    smtp_connect_timeout 30

    router_id LVS_DEVEL

}

vrrp_script chk_http_port { #添加一个脚本,周期执行

    script "/usr/local/src/nginx_check.sh"(这是脚本地址)

    interval 2  #(检测脚本执行的间隔)

    weight 2        
    }       
vrrp_instance VI_1 {        
    state BACKUP    # 主服务器写MASTER,备份写BACKUP 
    interface ens33 //网卡    
    virtual_router_id 51   # 主、备机的 virtual_router_id 必须相

同   
    priority 90 # 主、备机取不同的优先级,主机值较大,备份机

值较小 
    advert_int 1        
    authentication {

        auth_type PASS

        auth_pass 1111

    }

    virtual_ipaddress {

    10.4.7.60 // VRRP H 虚拟地址,这里所有的服务器都要相同,写ip地址,最后60可以随便改,比如10.6.7.60这个就不行了

    }

}

/usr/local/src/nginx_check.sh

#!/bin/bash

A=`ps -C nginx –no-header |wc -l`

if [ $A -eq 0 ];then

    /usr/sbin/nginx  # 这里是nginx启动地址,根据自己的修改

    sleep 2

    if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then

        killall keepalived

    fi

fi

然后在备用服务器也装上keepalived,进行keepalived配置和nginx_check.sh配置

测试: 两个服务器都启动 service nginx start service keepalived start

浏览器输入http://10.4.7.60,看到nginx欢迎页面,接着关闭主服务器的nginx.keepalived,刷新http://10.4.7.60,发现还是有nginx欢迎页面 image ip add可以发现绑定了10.4.7.60,使用哪个服务器,哪个能显示绑定