写点什么

Nginx 入门的基本使用和配置详解

用户头像
云流
关注
发布于: 2021 年 02 月 27 日

Nginx 版本:nginx-1.12.2.tar.gz

内容介绍

一、 nginx 简介

1、什么是 nginx 和可以做什么事情

Nginx 是高性能的 HTTP 和反向代理的服务器,处理高并发能力是十分强大的, 能经受高负 载的考验,有报告表明能支持高达 50,000 个并发连接数,实际上能达到 2~3 万个并发连接数


2、正向代理

需要在客户端配置代理服务器进行指定网站访问(代理的是客户端)



3、反向代理

暴露的是代理服务器地址,隐藏了真实服务器 IP 地址(代理的是服务器端)



4、负载均衡

增加服务器的数量,然后将请求分发到各个服务器上,将原先请求集中到单个服务器上的 情况改为将请求分发到多个服务器上,将负载分发到不同的服务器,也就是我们所说的负载均衡



5、动静分离


二、 Nginx 的安装

1、准备工作


(1)打开虚拟机,使用远程连接工具连接 linux 操作系统


(2)到 nginx 官网下载软件: http://nginx.org/


2、开始进行 nginx 安装,在 linux 系统的服务器端安装


(1)安装 pcre 依赖第一种方式:


第一步 联网下载 pcre 压缩文件依赖到自己的电脑中


命令: wget http://downloads.sourceforge.net/project/pcre/pcre/8.37/pcre-8.37.tar.gz


第二步 连接远程服务器,把 pcre 压缩文件上传到服务器中,然后解压该压缩文件


命令: tar –xvf pcre-8.37.tar.gz


第三步 进入 pcre-8.37.tar.gz 解压后的目录,执行 ./configure , 执行完成后,再执行 make && make install 命令,完成 pcre 的安装


第四步 查看 pcre 是否成功安装的命令: pcre-config --version


(2)安装 pcre 依赖第二种方式:


第一步 yum -y install pcre (yum 命令直接自动下载并且安装 pcre)


第二步 查看 pcre 是否成功安装的命令: pcre-config --version


(3)安装 openssl 、 zlib 、 gcc 依赖


yum -y install make zlib zlib-devel gcc-c++ libtool openssl openssl-devel
复制代码


(4)安装 nginx


第一步 联网下载 nginx 压缩文件依赖到自己的电脑中


nginx 官网下载软件: http://nginx.org/


第二步 连接远程服务器,把 nginx 压缩文件上传到服务器中,然后解压该压缩文件


执行命令: tar –xvf nginx-1.12.2.tar.gz


第三步 进入 nginx-1.12.2.tar.gz 解压后的目录,执行 ./configure 来进行检查, 执行完成后,再执行 make && make install 命令,完成 pcre 的安装


第四步 安装完 Nginx 后,需要知道系统中多了哪些文件,它们都安装到了那里。可以使用下面的命令进行查看: rpm -ql nginx 其中 rpm 是 linux 的 rpm 包管理工具,-q 代表询问模式,-l 代表返回列表,这样我们就可以找到 nginx 的所有安装位置了


第五步 安装完 Nginx 后,会在 usr 下多出来一个文件夹 local/nginx/nginx/sbin,在 sbin 里面有一个 nginx 启动脚本,因此我们先执行命令 cd/usr/local/nginx/sbin 找到 nginx 这个启动脚本,然后执行命令 ./nginx 来启动 nginx


第六步 执行命令: ps -ef | grep nginx 查看进程中是否有 nginx,有就说明 nginx 启动成功


第七步 用浏览器访问 nginx,在浏览器中输入:127.0.0.1 查看效果



第八步 如果没有显示上图中的内容,应该是服务端没有开放 80 端口,把 80 端口开放一下就可以了


  • 查看开放的端口号

  • firewall-cmd --list-all

  • 设置开放的端口号

  • firewall-cmd --add-service=http –permanent

  • firewall-cmd --add-port=80/tcp --permanent

  • 重启防火墙

  • firewall-cmd –reload


三、 Nginx 的常用命令和配置文件

Nginx 的常用命令

使用 nginx 操作命令,必须进入 nginx 目录中才可以


cd /usr/local/nginx/sbin
复制代码


1、查看 nginx 版本号


./nginx -v


2、产看 nginx 的状态


ps -ef | grep nginx


3、启动 nginx


./nginx


4、停止 nginx


./nginx -s stop


4、从容停止 nginx


./nginx -s quit


4、比较野蛮的,直接杀死 nginx 进程


./killall nginx


4、停止 nginx


./nginx -s stop


5、重新加载 nginx


./nginx -s reload


Nginx 的配置文件

Nginx 的配置文件的位置

1、查询 Nginx 的配置文件的位置,执行命令: rpm -ql nginx


  • 其中 rpm 是 linux 的 rpm 包管理工具,-q 代表询问模式,-l 代表返回列表,这样我们就可以找到 nginx 的所有安装位置了


2、配置文件的位置:cd /usr/local/nginx/conf/nginx.conf


配置文件中的内容包含三部分内容:全局块 、 events 块 、 http 块(包含 http 块自身和 server 块)

nginx.conf 文件的内容如下:

# 第一部分:全局块:配置服务器整体运行的配置指令#运行用户,默认即是nginx,可以不进行设置user  nginx;#Nginx进程,一般设置为和CPU核数一样 -=> 处理并发数的配置worker_processes  1;   #错误日志存放目录error_log  /var/log/nginx/error.log warn;#进程pid存放位置pid        /var/run/nginx.pid;
# 第二部分:events 块:影响 Nginx 服务器与用户的网络连接events { worker_connections 1024; # 单个后台进程的最大并发数}
# 第三部分:http 块:还包含两部分:http 全局块和server 块http { include /etc/nginx/mime.types; #文件扩展名与类型映射表 default_type application/octet-stream; #默认文件类型 #设置日志模式 log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main; #nginx访问日志存放位置
sendfile on; #开启高效传输模式 #tcp_nopush on; #减少网络报文段的数量
keepalive_timeout 65; #保持连接的时间,也叫超时时间
#gzip on; #开启gzip压缩
include /etc/nginx/conf.d/*.conf; #包含的子配置项位置和文件[server快]
复制代码
复制代码


nginx.conf 文件的内容的最后一行,有一个子文件的配置项 include /etc/nginx/conf.d/*.conf; ,那我们打开这个 include 子文件配置项看一下里边都有些什么内容,default.conf 文件的内容如下:

server {    listen       80;   #配置监听端口    server_name  localhost;  //配置域名
#charset koi8-r; #access_log /var/log/nginx/host.access.log main;
location / { root /usr/share/nginx/html; #服务默认启动目录 index index.html index.htm; #默认访问文件 }
#error_page 404 /404.html; # 配置404页面
# redirect server error pages to the static page /50x.html # error_page 500 502 503 504 /50x.html; #错误状态码的显示页面,配置后需要重启 location = /50x.html { root /usr/share/nginx/html; }
# proxy the PHP scripts to Apache listening on 127.0.0.1:80 # # ~ \.php$ 是正则表达式,匹配以.php结尾的所有文件 #location ~ \.php$ { # proxy_pass http://127.0.0.1; // 反向代理 #}
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000 # #location ~ \.php$ { # root html; # fastcgi_pass 127.0.0.1:9000; # fastcgi_index index.php; # fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name; # include fastcgi_params; #}
# deny access to .htaccess files, if Apache's document root # concurs with nginx's one # #location ~ /\.ht { # deny all; // deny是禁止访问 # allow all; // allow是允许访问 #}}
复制代码
复制代码


四、 Nginx 配置实例 1 反向代理

反向代理指令:proxy_pass

server{        listen 80; // 浏览器端访问地址的端口号          # server_name 可以是网址域名; // 浏览器端访问的地址          # server_name 192.168.191.34; // 浏览器端访问的地址        # location / {               # proxy_pass http://123.com; // nginx 反向代理的地址,可以是域名               # proxy_pass 192.168.23.45.8080; // nginx 反向代理的地址        # };                # ~ /edu/ 是正则表达式,区分大小写,匹配的是edu目录        # ~* /edu/ 是正则表达式,不区分大小写,匹配的是edu目录        # = /edu/ 是正则表达式,严格匹配,匹配的是edu目录          location ~ /edu/ {             proxy_pass 192.168.23.45.8081; // nginx 反向代理的地址        };                # ~ /vod/ 是正则表达式,匹配的是vod目录        location ~ /vod/ {             proxy_pass 192.168.23.45.8082; // nginx 反向代理的地址        }}复制代码
复制代码


反向代理还有些常用的指令,我在这里给大家列出:

  • proxy_set_header : 在将客户端请求发送给后端服务器之前,更改来自客户端的请求头信息

  • proxy_connect_timeout: 配置 Nginx 与后端代理服务器尝试建立连接的超时时间

  • proxy_read_timeout : 配置 Nginx 向后端服务器组发出 read 请求后,等待相应的超时时间

  • proxy_send_timeout:配置 Nginx 向后端服务器组发出 write 请求后,等待相应的超时时间

  • proxy_redirect : 用于修改后端服务器返回的响应头中的 Location 和 Refresh

  • 关于 proxy 代理指令的详细信息: www.nginx.cn/doc/mail/ma…


五、 Nginx 配置实例 2 负载均衡

配置文件中的内容包含三部分内容:全局块 、 events 块 、 http 块(包含 http 块自身和 server 块)

实现负载均衡主要在 http 块和 server 块里面配置


  • http 块的配置如下:


http {	# ... 省略http块默认带有的配置	upstream myserver {            server 115.28.52.63:8080 ;            server 115.28.52.63:8081 ;        }	}复制代码
复制代码


  • server 块的配置如下:


aerver {	location / {    	... 省略location里面默认带有的配置        proxy_pass http://myserver; //myserver是上面创建的myserver服务名        proxy_connect_timeout 10;    }}复制代码
复制代码


  • Nginx 提供了几种常用的负载均衡(load balance)的分配方式(策略)


1、轮询(默认)


每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器 down 掉,能自动剔除


2、 weight


weight 代表权,重默认为 1,权重越高被分配的客户端越多


upstream server_pool {  server 192.168.5.21 weight=10; // weight 代表权,重默认为 1,权重越高被分配的客户端越多  server 192.168.5.22 weight=10; }复制代码
复制代码


3、 ip_hash


每个请求按访问 ip 的 hash 结果分配,这样每个访客固定访问一个后端服务器,可以解决 session 的问题,例如:


upstream server_pool {  ip_hash;  server 192.168.5.21:80;  server 192.168.5.22:80;}复制代码
复制代码


4、 fair(第三方)


按后端服务器的响应时间来分配请求,响应时间短的优先分配


upstream server_pool {  server 192.168.5.21:80;  server 192.168.5.22:80;  fair;}复制代码
复制代码


六、 Nginx 配置实例 3 动静分离

1、什么是动静分离?

Nginx 动静分离简单来说就是把动态跟静态请求分开,不能理解成只是单纯地把动态页面和 静态页面物理分离。严格意义上说应该是动态请求跟静态请求分开,可以理解成使用 Nginx 处理静态页面, Tomcat 处理动态页面


动静分离从目前实现角度来讲大致分为两种:


  • 一种是纯粹把静态文件独立成单独的域名,放在独立的服务器上,也是目前主流推崇的方案

  • 另外一种方法就是动态跟静态文件混合在一起发布,通过 nginx 来分开



2、动静分离具体配置

  • 在 liunx 系统中准备静态资源,用于进行访问,在 nginx 里面,新建一个文件夹 data



  • 配置文件中的内容包含三部分内容:全局块 、 events 块 、 http 块(包含 http 块自身和 server 块)


在 nginx 配置文件中 server 块中进行配置,server 块的配置如下:


aerver {	server 80;    server_name 192.168.17.129;        #chartset koi8-r;    #access_log log/host.access.log main;        # 通过nginx实现静态资源跳转    location /www/ {    	# /data/是静态资源目录        root /data/;         index index.html index.htm;    }        # 通过nginx实现静态资源跳转    location /image/ {        # /data/是静态资源目录    	root /data/;        # autoindex on是列出访问目录,可以不加        autoindex on;    }}复制代码
复制代码


七、 Nginx 的高可用集群

1、什么是 nginx 高可用?

服务器的主 nginx 挂掉了,但是我们依然可以成功的请求到数据



(1)需要两台带有 nginx 的服务器


(2)需要 keepalived 软件;类似于路由,里面通过脚本来检查当前的 主服务器的 nginx(主 nginx) 是否还活着,如果活着就用,如果宕机死了,就去使用 从服务器的 nginx(备份的 nginx),在这个过程中,该软件会向外提供一个虚拟 IP,这个 IP 实际是不存在的,但是我们需要用这个虚拟 IP 去访问


(3)需要虚拟 ip


2、配置高可用的准备工作

(1)需要两台服务器 192.168.17.129 和 192.168.17.131


(2)在两台服务器安装 nginx 软件


在上面有说明如何安装 nginx


(3)在两台服务器安装 keepalived 软件


1) 为了方便,可以直接使用 yum 命令进行安装


yum install keepalived –y


安装的版本是 keepalived.x86_64 0:1.3.5-8.el7_6.5


2)查看是否安装成功:rpm -q -a keepalived


3)安装之后,在 etc 目录里面生成目录 keepalived,目录 keepalived 里面有文件 keepalived.conf


3、完成高可用配置(主从配置,2 个服务器都要配置)

(1)主要是修改/etc/keepalived/keepalivec.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 # 服务器的主机的名字,可以访问到主机  # /etc/hosts 文件中,添加主机名字 例如:127.0.0.1 LVS_DEVEL}
# 检测脚本(查看nginx是否还活着)和权重参数vrrp_script chk_http_port { script "/usr/local/src/nginx_check.sh" # 这个是自己创建的脚本文件位置 interval 2 # 检测脚本执行的间隔,2秒执行一次 weight 2 # 权重}
# 虚拟IP的配置,常用的配置vrrp_instance VI_1 { state BACKUP # 备份服务器上将 MASTER 改为 BACKUP interface ens33 //服务器网卡名称 使用ifconfig命令来查看 virtual_router_id 51 # 主、备机的 virtual_router_id 必须相同 priority 90 # 主、备机取不同的优先级,主机值较大,备份机值较小 advert_int 1 # 心跳检测,确认主服务器是否还活着,检测间隔为1秒 authentication { auth_type PASS # 权限校验的方式:密码 auth_pass 1111 # 权限校验的密码:1111 } virtual_ipaddress { 192.168.17.50 // VRRP H 虚拟地址 }}
复制代码
复制代码


(2)在/usr/local/src 添加检测脚本文件 nginx_check.sh



/usr/local/nginx/sbin/nginx 是 nginx 的启动路径

3)把两台服务器上 nginx 和 keepalived 启动


启动 nginx: ./nginx


启动 keepalived: systemctl start keepalived.service


4、最终测试

1)在浏览器地址栏输入 虚拟 ip 地址 192.168.17.50



2)把主服务器(192.168.17.129) nginx 和 keepalived 停止,再输入 192.168.17.50 查看效果



八、Nginx 的原理的简单分析

1、 Nginx 的原理

是通过 mater 和 worker 来实现的


2、 worker 如何进行工作的?

默认只有一个 master,多个 worker,有请求过来后,首先 master 会收到,然后由 mster 告知 worker 有新的请求过来了,这时候 woker 通过争抢机制,来得到这个新的请求,从来进行相应的处理


3、一个 master 和多个 woker 有好处

(1)可以使用 nginx –s reload 热部署,利用 nginx 进行热部署操作


(2)每个 woker 是独立的进程,如果有其中的一个 woker 出现问题,其他 woker 独立的, 继续进行争抢,实现请求过程,不会造成服务中断


4、设置多少个 woker 合适

worker 数和服务器的 cpu 数相等是最为适宜的


5、连接数 worker_connection

(1)第一个:发送请求,占用了 woker 的几个连接数?


答案: 2 或者 4 个


解析:nginx 配置的动静分离,请求静态资源占用 2 个连接数,请求动态资源,因为要通过 tomcat 找数据库的数据,所以占用 4 个连接数


(2)第二个: nginx 有一个 master,有四个 woker,每个 woker 支持最大的连接数 1024,支持的 最大并发数是多少?


普通的静态访问最大并发数是: worker_connections * worker_processes /2


普通的静态访问最大并发数是: 每个 woker 支持最大的连接数 * woker 个数 /2


而如果是 HTTP 作 为反向代理来说,最大并发数量是 worker_connections * worker_processes/4


而如果是 HTTP 作 为反向代理来说,最大并发数量是: 每个 woker 支持最大的连接数 * woker 个数 /4


原文链接:https://juejin.cn/post/6933106590446944264


如果觉得本文对你有帮助,可以转发关注支持一下


用户头像

云流

关注

还未添加个人签名 2020.09.02 加入

还未添加个人简介

评论

发布
暂无评论
Nginx入门的基本使用和配置详解