目录
一、Nginx简介
二、手工安装部署
Nginx偶数版本是稳定版本;奇数是开发测试版本
Nginx高性能、安全、稳定的WEB服务器软件,默认安装完成,只发布一套网站,在企业生产环境中,通常会基于Nginx WEB发布多个网站,将发布多个网站的方式称为虚拟主机。如果使用手工方式去配置多个网站,比较吃力、繁琐,可以引入SHELL编程自动化实现。
基于SHELL编程构建Nginx WEB平台,并且实现虚拟主机(多个网站)自动管理和配置,编程的注意要点如下:
1、提前部署Nginx WEB平台,检测服务是否部署;
2、如果Nginx WEB服务已经安装,无线安装,直接配置虚拟主机即可;
3、修改Nginx WEB主配置文件,添加虚拟主机配置信息;
4、虚拟主机主要采用多域方式,同一个80端口、IP地址、不同访问域名;
5、支持单个虚拟主机添加,或者多个虚拟主机同时添加;
echo $? 如果等于0 ,则预编译没问题
make
make install
cd
ll /usr/local/nginx/
/usr/sbin/groupadd -f www 创建组 /usr/sbin/useradd -g www www创建用户 netstat -tnlp |grep 80 查看监听端口 firewall-cmd --add-port=80/tcp --permanent 打开防火墙80端口
主配文件:cd /usr/local/nginx/conf
养成备份配置文件的习惯 cp nginx.conf nginx.conf.bak
很多#注释或空格可删除
删除方法1: awk '/#/' nginx.conf /第一个斜杠表示匹配 中间是匹配内容 /最后一个表示匹配完毕 awk '!/#/' nginx.conf !加感叹号,指的是不匹配 awk '!/#/' nginx.conf | awk '!/^$/' ^表示以什么开头 ^abc 以abc开头 ^$空行
删除方法2:
sed '/#/d' nginx.conf |sed '/^$/d'
删除方法3:
grep -aiv "#" nginx.conf| grep -v "^$"
把显示出来的复制,然后vim 打开nginx.conf配置文件 ggdG删除所有 复制替换即可
一个server就是一个虚拟主机
server_name 访问域名
root html/v2.lxh.net 发布目录 截图上为相对路径html/
原始网页文件目录存放在/usr/local/nginx/html 截图上为相对路径html/
/usr/local/nginx/sbin/nginx -s reload 重启
现在工作中不会再nginx.conf配server,而是采用下面方法
要发布的目录 domains目录
cd /usr/local/nginx/conf mkdir domains 创建domains文件夹 touch v1.lxh.net vim v1.lxh.net
如果想在配置一个虚拟主机,在domains文件夹下复制v1.lxh.net 修改配置即可
/usr/local/nginx/sbin/nginx -s reload
events { worker_connections 1024; } http { include mime.types; default_type application/octet-stream; sendfile on; keepalive_timeout 65; server { listen 80; server_name localhost; location / { root html; index index.html index.htm; } error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } } }
niginx要做的事情,都是由配置文件里面指定的
events { } #必写 http{ #Tomcat服务器集群 upatrem tomcat_server { 两个tomcat server 192.168.1.100:8081 weight=3 maxfails=3 fail_time=10s; server 192.168.1.101:8081 weight=2 maxfails=3 fail_time=10s; } server { #虚拟服务器,端口默认80 proxy_read_timeout proxy_next_upstream_error_timout;#故障转移的条件 proxy_next_upstream_tries 10; #限制重试次数 proxy_next_upstream_timeout 60s; #限制重试超时时间 location / { # 根据用户的url 走不同的流程,通配 #将代理请求返回的内容作为响应 proxy_set_header Host $http_host; proxy_pass http://tomcat _server; } #静态不变的由nginx直接返回,静态的内容和nginx放在同一台服务器 #root 资源所在的跟地址,此处为nginx安装目录内的相对路径 root html; } } }
Nginx配置集群负载均衡默认为模式为轮询;还可以指定负载均衡算法(默认加权轮询)
故障转移,将请求分配给A服务器失败后,继续讲请求分配给B服务器进行处理
Nginx在故障转移的情况下,会对其他服务器分配更多的请求,在高并发的情况下,每台服务器的压力都十分大,在添加分配的压力会导致正常的服务器也崩溃,如此反复可能造成整个集群的雪崩效应。
限制重试次数 proxy_next_upstream_tries 10 ; #默认是0,限制重试次数
显示重试超时时间 proxy_next_upstream_timeout 60s; # 限制重试超时时间
当某台被代理服务器处理请求,出现一定次数的错误的情况下(次数可配置), Nginx在一定时间内容(时间可配置) 不再讲请求分配给该服务器处理,过了熔断时间后,nginx会再次尝试分配一次请求给该服务器处理,如果还是失败,则继续熔断。
maxfails=3 fail_time=10s 最多错误3次,失败后停止10s在分配服务
Nginx是一款开源的、免费的WEB服务器软件, 是一个高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务,2019.3.12被F5硬件厂家以6.7亿美金收购了,主要是用于发布网站代码、提供网页信息服务的,用户通过浏览器可以实现页面的访问。
Nginx WEB软件默认只能处理静态网页,不能直接处理动态网页,动态网页交于第三方的程序去解析,Nginx官方宣称其处理静态网页的并发能力可以达到5w/s,相当于Apache WEB整体性能的5-10倍。因它的稳定性、丰富的功能集、示例配置文件和低系统资源的消耗而闻名。
Nginx作为负载均衡服务:Nginx 既可以在内部直接支持 Rails 和 PHP 程序对外进行服务,也可以支持作为 HTTP代理服务对外进行服务。Nginx采用C进行编写,不论是系统资源开销还是CPU使用效率都比 Perlbal 要好很多。
静态网页:静态网页一般是跟后台数据库不发生交互的网页,内容很少更新或几乎不更新,网页文件后缀名通常是.html、.htm、.xml结尾。
动态网页:动态网页一般是跟后端数据库发生交互的网页,其网页内容经常更新或者随着后端数据库内容变化而更新,网页文件后缀命名通常是以.asp、.php、.jsp等结尾的。
手工方式构建Nginx WEB平台,主要的部署方法有两种:
YUM二进制方式;
部署方式相对比较简单、快捷、高效,可以自动校验软件包的正确性,可以自动解决软件包之间的依赖关系,可以自动安装软件服务并且自动设置为系统服务,不能自定义软件服务特定的模块、功能、参数,安装之后的文件和目录相对比较分散,不便于后期的维护和管理。
MAKE源码编译方式;
部署方式相对比较复杂、繁琐、低效,不能自动校验软件包的正确性,不能自动解决软件包之间的依赖关系,不能自动安装软件服务并且自动设置为系统服务,可以自定义软件服务特定的模块、功能、参数,安装之后的文件和目录相对比较统一,便于后期的维护和管理。
断点续传 稳定版本:wget -c http://nginx.org/download/nginx-1.16.0.tar.gz
sed -i -e 's/1.12.2//g' -e 's/nginx\//JWS/g' -e 's/"NGINX"/"JWS"/g' src/core/nginx.h
因为Nginx是基于C语言开发的源代码程序,默认不能被linux操作系统直接使用,所以需要借助C编辑器将源码文件编译生成二进制文件,所以需要执行源代码包部署三个步骤。
黄色是选择安装路径
预编译:主要是检测Linux系统安装该软件所需的依赖环境、库文件,检测Linux操作系统是否存在GCC编译环境(C编译器),指定软件服务部署的目录,自定义软件服务特定的模块、功能、参数,最终会产生Makefile文件。
主要是通过make编译工具,读取Makefile文件,调用Linux操作系统下GCC编译环境(C编译器),将软件包中的源代码文件编译生成二进制文件。
Makefile文件用途,告知make编译工具,在编译源代码文件时,从哪个源代码文件开始编译至哪个源代码文件结束编译&记录编译时依赖信息。
主要是将第二步make编译产生的二进制文件,拷贝或者安装至Linux操作系统至的安装目录:--prefix=/usr/local/nginx/。
TYPE=Ethernet BOOTPROTO=static DEVICE=ens33:1 IPADDR=192.168.0.10 子网卡地址两台niginx相同 NETMASK=255.255.255.0
1、在编译过程中,
第一次编译需要处理nginx软件依赖包关系
安装nginx相关依赖包: yum -y install gcc openssl openssl-devel pcre-devel zlib zlib-devel
gcc 功能:预处理、编译、连接、汇编
openssl 功能:用于网站加密通讯
pcre 功能:用于支持解析正则表达式。
zlib 功能:用于对数据进行解压缩。网站之间通信时,数据先压缩再传输,通过消耗CPU的方式来节省网络带宽。
安装后验证:./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_ssl_module ...
2、编译make报错:make: *** 没有规则可以创建“default”需要的目标“build”
安装Nginx需要的相关依赖包
在初次安装Nginx过程中,经常会出现这样的错误: make: *** 没有规则可以创建“default”需要的目标
yum install pcre-devel -y yum install zlib zlib-devel yum install openssl openssl-devel //也可用一条命令代替 yum install pcre-devel zlib zlib-devel openssl openssl-devel
3、nginx编译安装之后,启动出现了:nginx: [emerg] getpwnam("nginx") failed
useradd -s /sbin/nologin -M nginx
4、启动失败出现nginx: [emerg] getpwnam("www") failed
原因是没有创建www这个用户
解决办法,创建组合用户
/usr/sbin/groupadd -f www /usr/sbin/useradd -g www www
5、部署完毕访问网页无内容
关闭防火墙命令 iptables -F
SHELL脚本文件命名后缀以.sh结尾;
SHELL脚本文件名称通常跟内部保持相关性,名称之间可以使用-、_;
SHELL编程代码编写工具:vi、vim、notepad、sublime、gedit等;
SHELL编程代码第一行以#!开头,表示强调和标识,其后接SHELL解释器类型,例如#!/bin/bash;
SHELL编程尽量使用#,除了第一行#!开头以外,其余的#表示注释和说明;
SHELL编程变量尽量使用大写字母命名,不能以数字开头,变量名称之间不能使用-,可以使用_;
#!/bin/bash #auto install nginx web yum install -y wget tar make gzip gcc yum install -y pcre pcre-devel zlib-devel wget -c http://nginx.org/download/nginx-1.16.0.tar.gz ls -l nginx-1.16.0.tar.gz tar -xzvf nginx-1.16.0.tar.gz cd nginx-1.16.0/ useradd -s /sbin/nologin www -M ./configure --prefix=/usr/local/nginx --user=www --group=www --with-http_stub_status_module make make install /usr/local/nginx/sbin/nginx ps -ef|grep nginx netstat -tnlp|grep -aiw 80 setenforce 0 firewall-cmd --add-port=80/tcp --permanent systemctl reload firewalld.service iptables -t filter -A INPUT -m tcp -p tcp --dport 80 -j ACCEPT service iptables save chmod +x auto_install_nginxv1.sh 增加执行权限
= 定义变量 变量定义不支持以数字开头,变量名不可以用 -- (横线)但是可以用_
[root@localhost ~]# WEB=www.jd.com
[root@localhost ~]# echo $WEB
www.jd.com
[root@localhost ~]# mkdir $WEB 则会创建文件名为 www.jd.com的文件
清除变量 unset WEB
[root@localhost ~]# unset WEB
[root@localhost ~]# echo $WEB 则未找到该命令
[root@localhost ~]# abc=123
[root@localhost ~]# echo $abc
123
[root@localhost ~]# echo ${abc}d
123d
[root@localhost ~]# NGX_SO=nginx.1.1.tar.gz
[root@localhost ~]# echo $NGX_SO
nginx.1.1.tar.gz
[root@localhost ~]# echo $NGX_SO|sed 's/.tar.gz//g'
nginx.1.1
[root@localhost ~]# echo $NGX_SO|sed 's/.tar.gz/--/g'
nginx.1.1--
v2[替换变量]
#!/bin/bash #auto install nginx web NGX_VER="1.16.0" NGX_YUM="yum install -y" NGX_DIR="/usr/local/nginx" NGX_SOFT="nginx-${NGX_VER}.tar.gz" NGX_URL="http://nginx.org/download" NGX_SRC=$(echo $NGX_SOFT|sed 's/\.tar.*//g') NGX_ARGS="--user=www --group=www --with-http_stub_status_module" $NGX_YUM wget tar make gzip gcc $NGX_YUM pcre pcre-devel zlib-devel wget -c $NGX_URL/$NGX_SOFT ls -l $NGX_SOFT tar -xzvf $NGX_SOFT cd $NGX_SRC/ useradd -s /sbin/nologin www -M ./configure --prefix=$NGX_DIR $NGX_ARGS make make install $NGX_DIR/sbin/nginx ps -ef|grep nginx netstat -tnlp|grep -aiw 80 setenforce 0 firewall-cmd --add-port=80/tcp --permanent systemctl reload firewalld.service iptables -t filter -A INPUT -m tcp -p tcp --dport 80 -j ACCEPT service iptables save
auto_install_nginx_web_v3.sh
env可以看系统的全部变量
if单表达式
if (表达式)
语句1
fi
if双表达式
if (表达式)
语句1
else
语句2
fi #fi结尾
#!/bin/bash #auto install nginx web NGX_VER="$1" NGX_YUM="yum install -y" NGX_DIR="/usr/local/nginx" NGX_SOFT="nginx-${NGX_VER}.tar.gz" NGX_URL="http://nginx.org/download" NGX_SRC=$(echo $NGX_SOFT|sed 's/\.tar.*//g') NGX_ARGS="--user=www --group=www --with-http_stub_status_module" if [ $# -eq 0 ];then echo -e "\033[32m-----------------\033[0m" echo -e "\033[32mUsage:{/bin/bash $0 1.12.0|1.16.0|help}\033[0m" exit fi CHECK_NUM=$(rpm -qa|grep -aicwE "gcc|pcre-devel") if [ $CHECK_NUM -lt 2 ];then $NGX_YUM wget tar make gzip gcc $NGX_YUM pcre pcre-devel zlib-devel fi wget -c $NGX_URL/$NGX_SOFT ls -l $NGX_SOFT tar -xzvf $NGX_SOFT cd $NGX_SRC/ useradd -s /sbin/nologin www -M ./configure --prefix=$NGX_DIR $NGX_ARGS make make install $NGX_DIR/sbin/nginx ps -ef|grep nginx netstat -tnlp|grep -aiw 80 setenforce 0 firewall-cmd --add-port=80/tcp --permanent systemctl reload firewalld.service iptables -t filter -A INPUT -m tcp -p tcp --dport 80 -j ACCEPT service iptables save