Nignx快速入门

Nginx快速入门

一、简介

产生的背景:当一台服务器同一时刻被大量客户端请求访问时,访问量超出服务器请求范围,服务器处理不过来,发生宕机或者丢失连接情况下,产生了Nignx反向代理技术。
Nginx是一款轻量级反向代理服务器,占用资源(内存,cpu,磁盘)少,能一次性处理大量的请求,并且运行非常稳定。
官网下载地址:http://nginx.org/en/download.html
淘宝采用TNegine服务器实现反向代理,TNeine是基于Niginx开发的服务器。
京东采用Nginx服务器服务器实现反向代理。
Nginx作用:
1、Http请求处理静态资源(html/js/css)
2、正向代理
3、反向代理+负载均衡
4、动静分离

image-20230928103142145

二、相关概念

高并发

1、同一个时间点通过设计保证系统能够同时并行处理很多请求。通俗点来讲,高并发是指在同一个时间点,有很多用户同时访问同一API接口或者URL地址。它经常会发生在有大活跃用户量,用户高聚焦的业务场景中。
2、负载均衡
将请求/数据集【均匀】分摊到多个操作单元上执行,负载均衡的关键在于【均匀】。

反向代理

客户端访问服务端时,不是直接访问服务端,而是通过Nginx服务器通过一定的规则分发到不同服务访问,并响应给客户端,Nginx代理的是服务端。常用分发规则有轮询、公平分发。轮询就是每个服务器都顺序访问一次,反复按照顺序进行访问,而公平分发就是资源配置高的服务器设置更高的权重,Nginx对该服务器多一点的分发访问。

image-20230928113555024

正向代理

客户端不能直接访问一个目标服务器,而是需要通过代理服务器去访问目标服务器,然后代理服务器响应数据给客户端,代理服务器代理的是客户端。比如:FQ。

image-20230928113530357

三、Nginx安装

官网下载(下载tar.gz文件)并把文件上传服务器相应的文件夹下。

http://nginx.org/en/download.html

解压文件

cd /usr/nginx/ #进入压缩包文件
tar -zvxf nginx-xxx.tar.gz  #解压文件夹

安装nginx依赖环境(c语言环境)

yum install gcc pcre-devel zlib-devel openssl-devel -y

进入压缩包根路径设置安装路径

./configure --prefix=[安装路径]

进行编译和安装操作

make&&make install  #编译和安装软件

进入安装目录nginx根目录下的sbin目录

./nginx  #默认根据根目录下的conf文件夹下的nginx.conf去启动文件。
./nginx  -c  [配置文件目录及其文件,文件名必须为nignx.conf]  #指定配置文件进行启动

常用的命令

./nginx -s stop #停止服务
./nginx -s reload #服务重启
./nginx -s quit  #平稳有序的停止服务
./nginx -t -c [配置文件目录] #检查配置文件是否可用

四、安装目录分析

sbin:启动文件目录
html:静态文件目录
sbin:可执行文件目录
logs:日志文件目录

nignx.conf配置文件分析解释

Nginx中文文档: https://www.nginx.cn/doc/index.html

#运行用户
user nobody;
#启动进程,通常设置成和cpu的数量相等
worker_processes  1;
 
#全局错误日志及PID文件
#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;
 
#pid        logs/nginx.pid;
 
#工作模式及连接数上限
events {
    #epoll是多路复用IO(I/O Multiplexing)中的一种方式,
    #仅用于linux2.6以上内核,可以大大提高nginx的性能
    use   epoll; 
 
    #单个后台worker process进程的最大并发链接数    
    worker_connections  1024;
 
    # 并发总数是 worker_processes 和 worker_connections 的乘积
    # 即 max_clients = worker_processes * worker_connections
    # 在设置了反向代理的情况下,max_clients = worker_processes * worker_connections / 4  为什么
    # 为什么上面反向代理要除以4,应该说是一个经验值
    # 根据以上条件,正常情况下的Nginx Server可以应付的最大连接数为:4 * 8000 = 32000
    # worker_connections 值的设置跟物理内存大小有关
    # 因为并发受IO约束,max_clients的值须小于系统可以打开的最大文件数
    # 而系统可以打开的最大文件数和内存大小成正比,一般1GB内存的机器上可以打开的文件数大约是10万左右
    # 我们来看看360M内存的VPS可以打开的文件句柄数是多少:
    # $ cat /proc/sys/fs/file-max
    # 输出 34336
    # 32000 < 34336,即并发连接总数小于系统可以打开的文件句柄总数,这样就在操作系统可以承受的范围之内
    # 所以,worker_connections 的值需根据 worker_processes 进程数目和系统可以打开的最大文件总数进行适当地进行设置
    # 使得并发总数小于操作系统可以打开的最大文件数目
    # 其实质也就是根据主机的物理CPU和内存进行配置
    # 当然,理论上的并发总数可能会和实际有所偏差,因为主机还有其他的工作进程需要消耗系统资源。
    # ulimit -SHn 65535
 
}
 
 
http {
    #设定mime类型,类型由mime.type文件定义
    include    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  logs/access.log  main;
 
    #sendfile 指令指定 nginx 是否调用 sendfile 函数(zero copy 方式)来输出文件,
    #对于普通应用,必须设为 on,
    #如果用来进行下载等应用磁盘IO重负载应用,可设置为 off,
    #以平衡磁盘与网络I/O处理速度,降低系统的uptime.
    sendfile     on;
    #tcp_nopush     on;
 
    #连接超时时间
    #keepalive_timeout  0;
    keepalive_timeout  65;
    tcp_nodelay     on;
 
    #开启gzip压缩
    gzip  on;
    gzip_disable "MSIE [1-6].";
 
    #设定请求缓冲
    client_header_buffer_size    128k;
    large_client_header_buffers  4 128k;
 
 
    #设定虚拟主机配置
    server {
        # 当listen出现了ip时,server_name就失去了意义。所以不配置也罢了。
        #侦听80端口
        listen    80;
        #定义使用 blog.redis.com.cn访问
        server_name  blog.redis.com.cn;
 
        #定义服务器的默认网站根目录位置
        root html;
 
        #设定本虚拟主机的访问日志
        access_log  logs/nginx.access.log  main;
 
        #默认请求
        location / {
            
            #定义首页索引文件的名称
            index index.php index.html index.htm;   
 
        }
 
        # 定义错误提示页面
        error_page   500 502 503 504 /50x.html;
        location = /50x.html {
        }
 
        #静态文件,nginx自己处理
        location ~ ^/(images|javascript|js|css|flash|media|static)/ {
            
            #过期30天,静态文件不怎么更新,过期可以设大一点,
            #如果频繁更新,则可以设置得小一点。
            expires 30d;
        }
 
        #PHP 脚本请求全部转发到 FastCGI处理. 使用FastCGI默认配置.
        location ~ .php$ {
            fastcgi_pass 127.0.0.1:9000;
            fastcgi_index index.php;
            fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
            include fastcgi_params;
        }
 
        #禁止访问 .htxxx 文件
            location ~ /.ht {
            deny all;
        }
 
    }
}

五、Nginx负载均衡

image-20230928143813978

配置三台tomcat,修改以下三处的端口号,每个tomcat以下端口号不一样,然后启动,注意开放端口号。(最好使用权重设置)

image-20230928203309763

image-20230928203327958

image-20230928203516687

配置nginx配置文件负载均衡

 #配置负载均衡
    upstream dbcp{
            server 192.168.147.110:9999;
            server 192.168.147.110:8080;
            server 192.168.147.110:9090;
       }

    #gzip  on;

    server {
        listen       80;
        server_name  crm;
        charset  utf-8;
        location / {
           # 配置负载均衡
           proxy_pass http://dbcp;
           proxy_set_header Host $host:$server_port;
           proxy_set_header X-Real-IP $remote_addr; #获得用户访问的真实ip地址,并且转发到tomcat中
           proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
           proxy_set_header X-Powered-By the-internet;
 
        }

       location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
        {
            #解决反向代理无法访问图片
            proxy_pass http://dbcp;
            proxy_set_header   Host $host:$server_port;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for; 
            expires      30d;
        }

        location ~ .*\.(js|css)?$
        {
            #解决反向代理无法访问js,css
            proxy_pass http://dbcp;
            proxy_set_header   Host $host:$server_port;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
            expires      12h;
        }

在tomcat安装路径的bin目录下 以及nginx安装路径的sbin目录下运行服务

./startup.sh  #启动tomcat服务器
./nginx   #启动nignx服务器

访问地址

http://[IP地址]:80/站点名

默认负载均衡是请求轮询,以下配置权重,权重越大访问次数越多!

upstream dbcp{
            server 192.168.147.110:9999 weight=2;
            server 192.168.147.110:8080 weight=5 ;
            server 192.168.147.110:9090 weight=10;
       }

配置最少连接数,在连接负载最少的情况下,nginx会尽量避免将过多的请求分发给繁忙的应用程序服务器,而是将新请求分发给不太繁忙的服务器,避免服务器过载。

upstream dbcp{
            least_conn;
            server 192.168.147.110:9999 weight=2;
            server 192.168.147.110:8080 weight=5 ;
            server 192.168.147.110:9090 weight=10;
       }

ipHash 确保来自同一客户端的请求将始终定向到同一台服务器,除非此服务器不可用

upstream dbcp{
            ip_hash;
            server 192.168.147.110:9999 ;
            server 192.168.147.110:8080 ;
            server 192.168.147.110:9090 ;
       }

六、配置静态资源文件

  • Nginx管理本地静态文件

先把静态文件项目放入Linux /home/takeaway 目录下

配置nginx.conf文件

server {
listen 80;
server_name localhost;
location / {
     root /home/takeaway;
     index index.html index.htm;
   }
}

路径路由规则

        location = / {
        	#规 则 A
        }
        location = /login {
        	#规 则 B
        }
        location ^~ /static/ {
            #规 则 C
        }
        location ~ \.(gif|jpg|png|js|css)$ {
        	#规 则 D
        }
        location ~* \.png$ { 
        	#规 则 E
        }
        9. 虚拟主机
        虚拟主机使用的是特殊的软硬件技术,它把一台运行在因特网上的服务器主机分成一台台
        “虚拟”的主机,每台虚拟主机都可以是一个独立的网站,可以具有独立的域名,具有完整的
        Intemet服务器功能(WWW、FTP、Email等),同一台主机上的虚拟主机之间是完全独立
        的。从网站访问者来看,每一台虚拟主机和一台独立的主机完全一样。
        分类
        1、基于域名的虚拟主机,通过域名来区分虚拟主机
        2、基于端口的虚拟主机,通过端口来区分虚拟主机
        9.1. 基于域名
        修改Window的 C:\Windows\System32\drivers\etc\hosts 文件
        修改Nginx配置文件
        location !~ \.xhtml$ {
        	#规 则 F
        }
        location !~* \.xhtml$ {
        	#规 则 G
        }
        location / {
        	#规 则 H
        }
        访 问 根 目 录 /, 比 如 http://localhost/ 将 匹 配 规 则 A
        访 问 http://localhost/login 将 匹 配 规 则 B,
        http://localhost/register 则 匹配 规 则 H
        访 问 http://localhost/static/a.html 将 匹 配 规 则 C
        访 问 http://localhost/a.gif, http://localhost/b.jpg 将 匹 配 规 则 D和 规 则 E,但 是 规 则 D顺 序 优 先 , 规 则 E不 起 作 用 , 而 http://localhost/static/c.png 则 优先 匹 配 到 规 则 C
        访 问 http://localhost/a.PNG 则 匹 配 规 则 E, 而 不 会 匹 配 规 则 D, 因 为 规 则 E$不 区 分大 小 写$。
        访 问 http://localhost/a.xhtml 不 会 匹 配 规 则 F和 规 则 G,http://localhost/a.XHTML不 会 匹 配 规 则 G, 因 为 不 区 分 大 小 写 。 规 则 F, 规 则 G属 于排 除 法 , 符 合 匹 配 规 则 但 是 不 会 匹 配 到 , 所 以 想 想 看 实 际 应 用 中 哪 里 会 用 到 。
        访 问 http://localhost/category/id/1111 则 最 终 匹 配 到 规 则 H, 因 为 以 上 规 则 都不 匹 配 , 这 个 时 候 应 该 是 nginx转 发 请 求 给 后 端 应 用 服 务 器 , 比 如 FastCGI( php) ,tomcat( jsp) , nginx作 为 方 向 代 理 服 务 器 存 在 。

七、虚拟主机

基于域名的虚拟主机(只能在本机进行域名访问)

  • 修改 C:\Windows\System32\drivers\etc\hosts 中的本地域名映射名称
192.168.147.110  www.aaa8080.com
192.168.147.110  www.bbb18080.com

nignx配置文件如下:

 upstream dbcp{
            server 192.168.147.110:9999;
            server 192.168.147.110:8080;
            server 192.168.147.110:9090;
       }

    #gzip  on;

    server {
        listen       80;
        server_name  crm;
        charset  utf-8;
        location / {
           # 配置负载均衡
          proxy_pass http://dbcp;
          proxy_set_header Host $host:$server_port;
          proxy_set_header X-Real-IP $remote_addr; #获得用户访问的真实ip地址,并且转发到tomcat中
          proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
          proxy_set_header X-Powered-By the-internet;
 
        }

访问:http://www.aaa8080.com/crm 打开项目

  • 基于端口的虚拟主机

本地域名映射与以上一致! 修改 C:\Windows\System32\drivers\etc\hosts 中的本地域名映射名称

配置nignx.conf配置信息

        http {
        	upstream bdp8080 {
       	 	server 192.168.58.101:8080;
       	 	server 192.168.58.102:8080;
        	server 192.168.58.103:8080;
        }
        upstream bdp18080 {
        	server 192.168.58.101:18080;
        	server 192.168.58.102:18080;
        	server 192.168.58.103:18080;
        }
        server {
        	listen 8080;
       	 	server_name www.yjxxt10086.com;
        location / {
        	proxy_pass http://bdp8080;
         }
        }
        server {
        	listen 18080;
            server_name www.yjxxt10086.com;
        location / {
        	proxy_pass http://bdp18080;
        		}
        	}
        }

访问:http://映射域名:8080[或18080]/站点名 进行基于端口域名访问。

posted @ 2023-10-02 13:57  戴莫先生Study平台  阅读(80)  评论(0编辑  收藏  举报