Nginx教程

基于Linux环境下的Nginx介绍及安装部署

本文主要是介绍基于Linux环境下的Nginx介绍及安装部署,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

目录

一、Nginx简介

二、手工安装部署


一、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配置集群负载均衡默认为模式为轮询;还可以指定负载均衡算法(默认加权轮询)

Nginx故障转移

故障转移,将请求分配给A服务器失败后,继续讲请求分配给B服务器进行处理

雪崩现象

Nginx在故障转移的情况下,会对其他服务器分配更多的请求,在高并发的情况下,每台服务器的压力都十分大,在添加分配的压力会导致正常的服务器也崩溃,如此反复可能造成整个集群的雪崩效应。

雪崩现象解决办法

限制重试次数 proxy_next_upstream_tries 10 ; #默认是0,限制重试次数

显示重试超时时间 proxy_next_upstream_timeout 60s; # 限制重试超时时间

Nginx熔断机制

当某台被代理服务器处理请求,出现一定次数的错误的情况下(次数可配置), Nginx在一定时间内容(时间可配置) 不再讲请求分配给该服务器处理,过了熔断时间后,nginx会再次尝试分配一次请求给该服务器处理,如果还是失败,则继续熔断。

maxfails=3 fail_time=10s 最多错误3次,失败后停止10s在分配服务

Nginx高可用双机热备

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源码编译方式;

部署方式相对比较复杂、繁琐、低效,不能自动校验软件包的正确性,不能自动解决软件包之间的依赖关系,不能自动安装软件服务并且自动设置为系统服务,可以自定义软件服务特定的模块、功能、参数,安装之后的文件和目录相对比较统一,便于后期的维护和管理。

  1. 官网下载nginx web软件: wget http://nginx.org/download/nginx-1.12.2.tar.gz

断点续传 稳定版本:wget -c http://nginx.org/download/nginx-1.16.0.tar.gz

  1. 解压:tar -xzvf nginx-1.12.2.tar.gz (-x extract解压,-z gzip格式,-v verbose详细,-f file文件)
  2. 进入解压目录:cd nginx-1.12.2/
  3. 修改nginx版本,隐藏版本对nginx web启动安全的作用,指令如下:

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编辑器将源码文件编译生成二进制文件,所以需要执行源代码包部署三个步骤。

  1. 预编译 ./configure --prefix=/usr/local/nginx/ --user=www --group=www --with-http_stub_status_module --with-http_ssl_module (状态监控模块)

黄色是选择安装路径

预编译:主要是检测Linux系统安装该软件所需的依赖环境、库文件,检测Linux操作系统是否存在GCC编译环境(C编译器),指定软件服务部署的目录,自定义软件服务特定的模块、功能、参数,最终会产生Makefile文件。

  1. 编译 make -j4 或者make 四线程快速编辑

主要是通过make编译工具,读取Makefile文件,调用Linux操作系统下GCC编译环境(C编译器),将软件包中的源代码文件编译生成二进制文件。

Makefile文件用途,告知make编译工具,在编译源代码文件时,从哪个源代码文件开始编译至哪个源代码文件结束编译&记录编译时依赖信息。

  1. 安装 make -j4 install

主要是将第二步make编译产生的二进制文件,拷贝或者安装至Linux操作系统至的安装目录:--prefix=/usr/local/nginx/。

  1. 启动nginx: /usr/local/nginx/sbin/nginx
  2. 筛选nginx进程 ps -ef | grep nginx

  1. 关闭防火墙命令 iptables -F
  2. 杀掉进程 pkill nginx
  3. 配置虚拟ip用以高可用切换
  4. cd /etc/sysconfig/network-scripts/
  5. cp ifcfg-enss33 ifconfig-ens33:1 拷贝网卡一个为子接口并且命名为ens33:1
  6. vim ifcofig-ens33:1 编辑网卡 配好cat确认一下
TYPE=Ethernet 
BOOTPROTO=static 
DEVICE=ens33:1 
IPADDR=192.168.0.10 子网卡地址两台niginx相同 
NETMASK=255.255.255.0
  1. ifup ens33:1 唤醒网卡
  2. ifconfig 查看添加是否成功
  3. ifdown ens33 关掉网卡

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编程自动部署Nginx WEB

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

这篇关于基于Linux环境下的Nginx介绍及安装部署的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!