ngnix配置及实例

1、 nginx常用命令

使用nginx操作命令的前提条件就是:必须进入nginx的目录

   cd /user/local/nginx/sbin
  • 查看版本号
    ./nginx-v
  • 启动nginx
   ./nginx
  • 关闭nginx
   ./nginx-s stop
  • 重新加载nginx-----不重启服务器,重新加载配置文件,配置生效
    ./nginx-s reload

2、 nginx配置文件

nginx配置文件位置:/user/local/nginx/conf/nginx.conf,通过vi nginx.conf命令打开配置文件,nginx配置文件由三部分组成

  • 第一部分: 全局块:从配置文件开始到events块之间的内容,主要设置一些影响nginx服务器整体运行的配置指令。主要包括配置运行nginx服务器的用户(组)、允许生成的worker process数,进程pid存放路径、日志存放路径和类型以及配置文件的引入等
  • 第二部分:events块:events块所涉及的指令主要影响nginx服务器与用户的网络连接,常用的设置包括是否开启对多worker processe下的网络链接进行序列化,是否允许同时接收多个网络连接,选取哪种事件驱动来处理连接请求,每个worker_processe可以同时支持最大的连接数等。这部分的配置对nginx的性能的影响较大,实际中应灵活配置
  • 第三部分:http块:是nginx服务器配置中最频繁的部分,代理、缓存、和日志定义等绝大多数功能和第三方模块的配置都这,反向代理、负载均衡、动静分离、高可用都在这配(注意:http块包括http全局块、server块)
#第一部分: 全局块:从配置文件开始到events块之间的内容,主要设置一些影响nginx服务器整体运行的配置指令。
#主要包括配置运行nginx服务器的用户(组)、允许生成的worker process数,进程pid存放路径、日志存放路径和类型以及配置文件的引入等

# user  nginx;
worker_processes  1;  #nginx服务器并发处理服务的关键配置,值越大,可以支持的并发处理越多,但会受到硬件、软件等设备的制约
error_log  /var/log/nginx/error.log warn;
pid        /var/run/nginx.pid;


#第二部分:events块:events块所涉及的指令主要影响nginx服务器与用户的网络连接,常用的设置包括是否开启对多worker processe下的网络链接进行序列化,是否允许同时接收多个网络连接,选取哪种事件驱动来处理连接请求,每个worker_processe可以同时支持最大的连接数等.
#这部分的配置对nginx的性能的影响较大,实际中应灵活配置
events {
   worker_connections  1024; #每个worker_processe可以同时支持最大的连接数为1024
}


#第三部分:http块:是nginx服务器配置中最频繁的部分,代理、缓存、和日志定义等绝大多数功能和第三方模块的配置都这,反向代理、负载均衡、动静分离、高可用都在这配
#注意:http块包括http全局块、server块
http {
  #http全局块 :http全局块配置的指令包括文件引入、	MIME-TYPE定义、日志自定义、连接超时时间、单链接请求上限等
   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"';
   server_tokens off;
   access_log  /var/log/nginx/access.log  main;

   sendfile        on;
   #tcp_nopush     on;
   keepalive_timeout  300;
   proxy_max_temp_file_size 0;
   send_timeout 3600;
   proxy_send_timeout 300; #后端服务器数据回传时间(代理发送超时)
   proxy_read_timeout 300; #连接成功后,后端服务器响应时间(代理接收超时)
    #client_max_body_size    200m;
   gzip  on;
   #include /etc/nginx/conf.d/*.conf;
   
   #server块:server和虚拟主机有密切关系,虚拟主机从用户角度看,和一台独立的硬件主机是完全一样的,该技术的产生是为了节省互联网服务器硬件成本。
   #每个http块可以包含多个server块,而每个server块就相当于一个虚拟主机
   #每个server块也分为全局server块,以及可以同时包含多个location块
   server {
       listen 8095;   #nginx目前监听的端口号是8095端口
       server_name localhost;    #主机名称
       include /etc/nginx/conf.d/server.conf;
       location ^~/user/{
         proxy_pass  '$USER';
       }
       location ^~/service/{
         proxy_pass  '$SERVICE';
       }
       location /{
         add_header Access-Control-Allow-Origin *;
         add_header Access-Control-Allow-Methods 'GET, POST, OPTIONS';
         add_header Access-Control-Allow-Headers 'DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Authorization';
         root   /opt/apps/dist;
         index  index.html index.htm;
         try_files $uri $uri/ /index.html;
       }
   }
}

3、 localtion说明

该指令用于匹配URL
语法如下:

  location  [ = | ~ | ~* | ^~] uri { 
       
   }
  • =:用于不含正则表达式的uri前,要求请求字符串与uri严格匹配,如果匹配成功,就停止继续向下搜索并立即处理该请求
  • ~:用于表示uri包含正则表达式,并且区分大小写
  • ~*:用于表示uri包含正则表达式,并且不区分大小写
  • ^~:用于不含正则表达式的uri前,要求nginx服务器找到标识uri和请求字符串匹配度最高的location后,立即处理此location请求,而不再使用location块中的正则uri和请求字符串做匹配
  • 注:如果uri包含正则表达式,则必须要有 ~ 或者 ~* 标识

4、 nginx配置-反向代理实例1

(1)实现效果:

  • 打开浏览器,在浏览器地主栏输入地址www.123.com,跳转至linux系统的tomcat主页面中
  • 补充: - 打开浏览器,在浏览器地主栏输入一个域名(比如www.baidu.com)的匹配规:先去windows系统下(本地)的host文件中寻找看是否有相应的配置,如果有的话先根据host文件中的配置执行,如果没有的话到网络上找DNS域名解服务器找网通ip进行解析执行。

(2) 准备工作:

  • 在linux系统上安装tomcat,使用默认端口8080启动
    *tomcat安装文件放到linux系统中,解压
    *进入tomcat的bin目录中,./startup.sh启动tomcat服务器

  • 对外开放访问端口(linux系统中默认并不是所有端口都开放,需要设置防火墙,加上开放规则,并重新加载防火墙)
    *firewall-cmd --add-port=8080/tcp --permanent 开放8080端口
    *firewall-cmd-reload 重新加载防火墙
    *firewall-cmd --list-all 查看已经开放的端口
    在这里插入图片描述
    (3) 在客户端windows系统中通过浏览器访问linux系统中的tomcat:

  • 在浏览器地主栏输入地址www.123.com,跳转至linux系统的tomcat主页面中访问过程分析在这里插入图片描述
    (4)具体配置

  • 在windows系统的host文件进行域名和ip对应关系的配置

  • 添加内容在host文件中(ip 域名)
    在这里插入图片描述

  • 具体配置

http {
  server {
      listen 80;   #nginx目前监听的端口号是80端口
      server_name 192.168.17.129;    #主机名称
      include /etc/nginx/conf.d/server.conf;
       location  /{      #当访问192.168.17.129:80时相当于192.168.17.129:80/,会转发到'http://172.0.0.1:8080'
       #最终的结果就是,浏览器上访问www.123.com本地解析到192.168.17.129:80,然后通过nginx转发到http://172.0.0.1:8080
        proxy_pass  'http://172.0.0.1:8080';
      }
  }
}

5、 nginx配置-反向代理实例2

(1)实现效果:

  • 使用nginx反向代理,根据访问的路径跳转到不同端口的服务中,nginx的监听端口为9001
  • 例如:
    访问地址http://127.0.0.1:9001/edu/,直接跳转到127.0.0.1:8080
    访问地址http://127.0.0.1:9001/vod/,直接跳转到127.0.0.1:8081

(2) 准备工作:

  • 在linux系统上安装两个tomcat,分别使用端口8080及8081启动,并开放9001、8080及8081端口
  • 分别在tomcat服务器中创建文件夹(edu、vod),并分别在文件夹内创建测试界面(a.thml<一个写的是用h标签包裹的8080数字,一个的是用h标签包裹的8081数字>)

(3)具体配置

  • 在windows系统的host文件进行域名和ip对应关系的配置
  • 添加内容在host文件中(ip 域名)
  • 具体配置
http {
  server {
      listen 9001;   #nginx目前监听的端口号是9001端口
      server_name 192.168.17.129;    #主机名称
      include /etc/nginx/conf.d/server.conf;
      #注意 ~/edu/是正则表达式的形式
       location  ~/edu/{ 
       #最终的结果就是,浏览器上访问www.123.com本地解析到192.168.17.129:9001,然后通过nginx转发到http://172.0.0.1:8080
        proxy_pass  'http://172.0.0.1:8080';
      }
       location  ~/vod/{ 
       #最终的结果就是,浏览器上访问www.123.com本地解析到192.168.17.129:9001,然后通过nginx转发到http://172.0.0.1:8081
        proxy_pass  'http://172.0.0.1:8081';
      }
  }
}

(4)测试

  • 访问http://192.168.17.129:9001/edu/a.html
  • 访问http://192.168.17.129:9001/vod/a.html
    在这里插入图片描述

5、 nginx配置-负载均衡-nginx提供的几种分配方式(策略):

(1)轮询(默认)
每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除
(2)weight
weight代表权重,默认为1,权重越高被分配的客户端越多。
– 指定轮询几率,weight和访问率成正比,用于后端服务器性能不均的情况
(3)ip_hash
每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session问题
(4)fair(第三方)
按后端服务器的响应时间来分配请求,响应时间短的优先分配

6、 nginx配置-负载均衡实例

(1)实现效果:

  • 浏览器地址栏输入地址http://192.168.17.129/edu/a.html,负载均衡效果,平均8080和8081端口中
    (2) 准备工作:
  • 在linux系统上安装两个tomcat,分别使用端口8080及8081启动,并开放8080及8081端口
  • 分别两台在tomcat服务器中webapps目录中。创建名称是edu的文件夹,在edu文件夹中创建页面a.html(一个写的8080,一个写的8081),用于测试

(3)具体配置
在http块中加一个 upstream ,请求代理地址写upstream的自定义的名

http {
......
#------------------重点--------------需要加 upstream 并起名 myserver
 upstream myserver{
      ip_hash
      server 192.168.17.129:8080 weight=1;
      server 192.168.17.129:8081 weight=1;
      # fair
 }
  server {
      listen 80;   #nginx目前监听的端口号是80端口
      server_name 192.168.17.129;    #主机名称
       location  /{ 
        proxy_pass  'http://myserver': #--------重点---------这里填写的是自己定义的upstream名:myserver
      }
  }
  ......
}

(4)测试

  • 因为监听端口是80端口,可以省略,所以直接访问ip即可
  • 访问http://192.168.17.129/edu/a.html,每次请求该地址,nginx都会将请求平均分散到8080以及8081服务器上
    在这里插入图片描述
    在这里插入图片描述

6、 nginx配置-动静分离

(1)什么是动静分离
nginx动静分离简单来说就是把动态请求跟静态请求分开,不能理解成只是单纯的把动态页面和静态页面物理分离。可以理解成nginx处理静态页面,tomcat处理动态页面。
动静分离从实现角度大致分为两种:

  • 纯粹把静态文件独立成单独的域名,放在独立的服务器上,也是目前主流推荐的方案
  • 动态跟静态文件混合在一起发布,通过nginx来分开
    在这里插入图片描述

通过location指定不同的请求转发,通过expires参数设置,可以使浏览器缓存过期时间,减少与服务器之间的请求和流量,具体expires定义:是给一个资源设定一个过期时间,也就是说无需去服务端验证,直接通过浏览器自身确认是否过期即可,故不会产生额外的流量(此方法适合不经常变动的资源,如果是经常变动不建议使用expires来缓存),如果设置3d,表示这三天之内访问这个url,发送一个请求。对比服务器该文件最新更新时间,如果没有变化则不会从服务器抓取,返回状态码304,如果有修改,则直接从服务器重新下载,返回状态码200。
(2)准备工作

  • 在linux系统中准备静态资源,用于进行访问
    根目录下创建data文件夹,并在data下创建www文件夹(放一个html页面-内容是:test html !!)以及image文件夹(放一个01.jpg)
    在这里插入图片描述
    (3)具体配置
http {
......
   server {
       listen 80;   #nginx目前监听的端口号是80端口
       server_name 192.168.17.129;    #主机名称
        location  /www/{ 
           root  /data/;  #访问data目录下的资源
           index index.html index.htm;
       }
       location  /image/{ 
           root  /data/;  #访问data目录下的资源
           autoindex on;  #列出你当前文件夹的内容
       }
   }
   ......
}

(4)测试

  • 浏览器中输入地址:http://192.168.17.129/image/ nginx中配置image时有autoindex on,故列出文件夹中的内容
    在这里插入图片描述
    在这里插入图片描述
  • 浏览器中输入地址:http://192.168.17.129/www/ nginx中配置www时没有配置autoindex on,故不会列出文件夹中的内容;http://192.168.17.129/www/a.html可出现页面
    在这里插入图片描述
    在这里插入图片描述

7、 nginx配置-高可用实例(nginx配置高可用集群)

问题1:tomcat宕机影响不大(一般配置多个tomcat服务,宕机可用其它的),但nginx宕机,则请求无法实现
在这里插入图片描述

(1)nginx高可用(设置一台主服务器,一台备份服务器(也叫从服务器)。优先使用主服务器,如果主服务器宕机自动切换到备份服务器继续工作,需要使用keepalived这个软件,相当一个路由,通过脚本检测当前绑定的服务器是否还活着,如果活着就用当前服务器,如果宕机了就切换到其它服务器,访问的nginx地址是一个虚拟ip,keepalive作用就是将虚拟ip绑定到当前能用的服务器)
在这里插入图片描述
(2)配置高可用准备工作

  • 需要两台服务器(192.168.17.129 || 192.168.17.131 )
  • 在两台服务器中安装nginx
  • 在两台服务器中安装keepalived(在etc里面生成目录keepalived,有文件keepalived.conf)

(3)完成高可用配置(主要是修改keepalived.conf)

  • 需要两台服务器(192.168.17.129 || 192.168.17.131 )
  • 在两台服务器中安装nginx
  • 在两台服务器中安装keepalived(在etc里面生成目录keepalived,有文件keepalived.conf)
 ! Configuration File for keepalived
   #全局定义模块
 global_defs {
    notification_email {
      acassen@firewall.loc
      failover@firewall.loc
      sysadmin@firewall.loc #邮件报警,可以不设置,后期nagios统一监控。
    }
    notification_email_from Alexandre.Cassen@firewall.loc
    smtp_server 192.168.17.129   ##服务器ip   192.168.17.129   或者   192.168.17.131
    smtp_connect_timeout 30
   router_id LVS_DEVEL  #此处注意router_id为负载均衡标识,在局域网内应该是唯一的,通过LVS_DEVEL应该能访问到主机或者服务器,在host文件中设置(etc/hosts文件)如下放配置router_id截图。
 }
   # 脚本
 vrrp_script chk_http_port{
    script "/user/local/src/nginx_check.sh" #需要执行的脚本
    interval 2 # 检测脚本执行的间隔
    weight -20 # 权重(当脚本中条件成立,则把当前服务器权重降低20)
 }
  #VRRP实例定义块 ---虚拟rp模块
 vrrp_instance VI_1 {
     state MASTER #状态只有MASTER和BACKUP两种,并且要大写,MASTER为工作状态,BACKUP是备用状态。
     interface ens33    #网卡
         lvs_sync_daemon_inteface eth0  #这个默认没有,相当于心跳线接口,DR模式用的和上面的接口一样,也可以用机器上的其他网卡eth1,用来防止脑裂。
     virtual_router_id 51 #虚拟路由标识,同一个vrrp_instance的MASTER和BACKUP的vitrual_router_id 是一致的。
     priority 100  #优先级,同一个vrrp_instance的MASTER(一般设置100)优先级必须比BACKUP高。
     advert_int 1 #MASTER 与BACKUP 负载均衡器之间同步检查的时间间隔,单位为秒,每隔这一段时间发送一次心跳,检测该服务器是否还活着。
     authentication { #权限校验方式
         auth_type PASS  #验证authentication。包含验证类型和验证密码。类型主要有PASS、AH 两种,通常使用的类型为PASS(密码方式),\
        auth_pass 1111   #(表示密码是1111)据说AH 使用时有问题。验证密码为明文,同一vrrp 实例MASTER 与BACKUP 使用相同的密码才能正常通信。
     }
    virtual_ipaddress { #虚拟ip地址,可以有多个地址,每个地址占一行,不需要子网掩码,同时这个ip 必须与我们在lvs 客户端设定的vip 相一致!
         192.168.17.50
         # 192.168.200.101
        # 192.168.200.102
     }
 }
 #虚拟服务器定义块
# virtual_server 192.168.200.100 443 {   #虚拟IP,来源与上面的虚拟IP地址,后面加空格加端口号
  #  delay_loop 6  #健康检查间隔,单位为秒
  #   lb_algo rr    #负载均衡调度算法,一般用wrr、rr、wlc
  #   lb_kind NAT   #负载均衡转发规则。一般包括DR,NAT,TUN 3种。
  #   persistence_timeout 50 #会话保持时间,会话保持,就是把用户请求转发给同一个服务器,不然刚在1上提交完帐号密码,就跳转到另一台服务器2上了。
   #  protocol TCP  #转发协议,有TCP和UDP两种,一般用TCP,没用过UDP。
   #  real_server 192.168.201.100 80 { #真实服务器,包括IP和端口号
  #      weight 1  #权重,数值越大,权重越高 
   #      TCP_CHECK {  #通过tcpcheck判断RealServer的健康状态
     #        connect_timeout 3 #连接超时时间
    #         nb_get_retry 3 #重连次数
    #         delay_before_retry 3 #重连时间间隔
    #         connect_port 80  #检测端口
        }
     }
 }
  • 在 /user/local/src/目录下添加检测脚本/nginx_check.sh
###/nginx_check.sh 检测脚本
A = `ps -C nginx -no-header |wc -l`
if [ $A -eq 0];then
   /user/local/ngnix/sbin/ngnix  ##nginx启动路径
   sleep 2
   if [ `ps -C nginx -no-header |wc -l`  -eq 0];then
     killall keepalived
   fi
fi
  • 两台服务器上都启动nginx( ./nginx )以及keepalived( systemctl.start keepalived service )
  • 配置文件详解截图
    <1>配置router_id截图
    在这里插入图片描述 (4)测试高可用 - 浏览器中输入虚拟ip地址:http://192.168.17.50(可看到nginx界面,故虚拟ip已绑定)在这里插入图片描述在这里插入图片描述
  • 把主服务器(192.168.17.129)的ngnix和keepalived停止,继续输入虚拟ip地址:http://192.168.17.50(可显示nginx,且虚拟ip已绑定,故已自动切换至 从服务器也就是备份服务器)
    在这里插入图片描述
    在这里插入图片描述

8、 nginx配置-原理

(1)实现效果:
在这里插入图片描述

  • master进程(分配工作任务、管理)
  • worker进程(实施工作任务–争抢机制)
  • 一个master和多个worker的好处
    (1)可以使用nginx-s reload热部署,利用nginx进行热部署操作
    (2)每个worker是独立的进程,如果其中的一个worker出现问题,其他的worker独立的,继续进行争抢,实现请求工程,不会造成服务中断
    在这里插入图片描述
  • 设置多少worker最合适
    每个worker的线程可以把一个cpu的性能发挥到极致,所以worker数和服务器的cpu数相等最为适宜
  • 连接数worker_connection
    在这里插入图片描述
    (1)发送一个请求占用worker的2个或者4个连接数,如果是静态资源则占用2个连接数(向worker请求即可),如果是动态资源则占用4个连接数(需要继续向tomcat请求)
    (2)1个master、4个worker,每个worker支持的最大连接数是1024,这种情况下最大的并发数是:
    普通的静态资源最大并发数:worker支持的最大连接数(worker数 * 每个worker支持的最大连接数)/2 即:worker_connections * worker_processes/2
    http作为反向代理最大并发数:worker支持的最大连接数(worker数 * 每个worker支持的最大连接数)/4即:worker_connections * worker_processes/4(原因:作为反向代理服务器,每个并发会建立与客户端的连接和与后端服务的连接,会占用两套连接)
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要使用nginx服务器来搭建下载站,需要对nginx的配置文件进行相应的设置。 首先,打开nginx的配置文件,通常位于/etc/nginx/nginx.conf或/usr/local/nginx/conf/nginx.conf路径下。在文件的http块中进行配置。 1. 设置虚拟主机:可以通过server指令添加多个虚拟主机来实现多个下载站点的管理。例如: ``` server { listen 80; server_name download.example.com; location / { root /path/to/download/files; autoindex on; } } ``` 上述配置中,listen指令用于监听80端口,server_name指令指定下载站的域名。location指令用于指定下载文件所在的路径,并通过autoindex on指令启用文件的自动索引功能。 2. 添加安全性措施:为了保护站点和防止非法下载,可以在虚拟主机中添加一些安全性的配置。例如: ``` server { ... location / { ... #禁止访问特定类型的文件 location ~* \.(php|cgi|asp|aspx|exe)$ { deny all; } #限制只能从特定的来源进行下载 valid_referers server_names ~\.google\.com$; if ($invalid_referer) { return 403; } } } ``` 上述配置中,通过在location块中设置正则表达式,禁止访问特定类型的文件。通过valid_referers指令,限制只能从特定来源进行下载。 3. 配置SSL证书:如果需要在下载站点中使用HTTPS协议,可以添加SSL证书配置。例如: ``` server { listen 443 ssl; ssl_certificate /path/to/certificate.pem; ssl_certificate_key /path/to/private_key.pem; ... } ``` 上述配置中,listen指令监听443端口,并通过ssl_certificate和ssl_certificate_key指令指定SSL证书的路径。 4. 保存并退出配置文件后,需要重启nginx服务器使配置生效。运行命令: ``` sudo systemctl restart nginx ``` 以上是一个基本的nginx配置文件实例,通过合理的配置,可以构建一个安全、稳定且高效的下载站。根据实际需求和具体情况,可以进一步进行更复杂的配置

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值