NGINX教程,包教包会

1. 安装

1.1 Windows环境

  1. 到官网下载
    官网地址,选择下载稳定版本
  2. 无需安装解压即可使用

1.2 Linux环境

博客参考

  1. 安装完毕后,nginx目录可以在/usr/local/nginx中找到
  2. 其中
    • nginx启动 在 ./sbin中
    • nginx.conf 在 ./conf中

2.常用命令

2.1 Windows环境

找到nginx的解压目录,在此目录下打开cmd

![](https://i0.hdslb.com/bfs/album/5460fc81781c39f8a19583d0bfde338fbf941962.png#crop=0&crop=0&crop=1&crop=1&id=Jm0r6&originHeight=280&originWidth=744&originalType=binary&ratio=1&rotation=0&showTitle=false&status=done&style=none&title=)
  1. 启动nginx
    会一闪而过,这是正常滴
start nginx.exe
  1. 重新加载配置文件
 nginx.exe -s reload
  1. 关闭nginx
nginx.exe -s stop # 二选一,均可
nginx.exe -s quit

2.2 Linux环境

nginx启动在 /usr/local/nginx/sbin 中

  1. 启动nginx
[root@aguozi sbin]# ./nginx
  1. 重新加载nginx.conf
[root@aguozi sbin]#  ./nginx -s reload
  1. 关闭nginx
[root@aguozi sbin]# ./nginx -s stop

3.配置文件解释

文件名都是nginx.conf,不论系统都在安装目录下的/conf文件中

3.1 文件结构

  • 全局块
  • events块
  • Http全局块
    • Server全局块
      • location块
      • location块
    • Server全局块
      • location块
      • location块

3.1.1 全局块

#user  nobody;
worker_processes  1;

#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

#pid        logs/nginx.pid;

3.1.2 events块

# events块
events {
    worker_connections  1024;
}

3.1.3 http块和子块

#http块
http {
	include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
     keepalive_timeout  65;
    # server块
    server {

            listen       80;
            server_name  localhost;
    	# location块
            location / {
                root   html;
                index  index.html index.htm;
            }
            error_page   500 502 503 504  /50x.html;
            location = /50x.html {
                root   html;
            }
    }
	# 可以配置多个server块	
}

3.2 配置详解

3.2.1 全局块配置

全局配置,nginx服务器整体运行的配置

常用 worker_processes 2; 设置进程数

# 配置⽤户或者组,默认为nobody nobody。
user www www;  

#Nginx开启的worker进程数,建议为CPU的核数
worker_processes 2; 

#指定nginx进程运⾏⽂件存放地址
pid /nginx/pid/nginx.pid;

#指定⽇志路径,级别。这个设置可以放⼊全局块、http块、server块,级别以此为:debug|info|notice|warn|error|crit|alert|emerg
error_log log/error.log debug; 

#可以在任意地⽅使⽤include指令实现配置⽂件的包含,类似于apache中的include⽅法,可减少主配置⽂件长度。
include vhosts/*.conf;

3.2.2 events事件配置

events 块涉及的指令主要影响 Nginx 服务器与用户的网络连接

events {
    #设置⽹路连接序列化,防⽌惊群现象发⽣,默认为on
    accept_mutex on; 
    #默认: 500ms 如果⼀个进程没有互斥锁,它将延迟⾄少多长时间。默认情况下,延迟是500ms 。
    accept_mutex_delay 100ms; 
    #设置⼀个进程是否同时接受多个⽹络连接,默认为off
    multi_accept on;
    #事件驱动模型,select|poll|kqueue|epoll|resig|/dev/poll|eventport,不建议设置,nginx会⾃⾏选择
    use epoll;
    #最⼤连接数,默认为512
    worker_connections  1024;
}

3.2.3 http部分

包括http全局块,以及多个server块。

http 全局块配置的指令包括文件引入、 MIME-TYPE 定义、日志自定义、连接超时时间、单链接请求数上限等。

http {
	#⽂件扩展名与⽂件类型映射表
    include       mime.types;
    # 默认⽂件类型,默认为text/plain
    default_type  application/octet-stream; 
    #取消服务⽇志
    #access_log off; 
    #允许sendfile⽅式传输⽂件,默认为off,可以在http块,server块,location块。
    sendfile on;   
    #每个进程每次调⽤传输数量不能⼤于设定的值,默认为0,即不设上限。
    sendfile_max_chunk 100k;  
    #连接超时时间,默认为75s,可以在http,server,location块。
    keepalive_timeout 65;  
    #开启gzip资源压缩
    gzip  on;
    
    #负载均衡
    upstream blog {   
        server 192.167.20.19:8081;
        server 192.168.10.121:8080 weight=5;
    }
    
    #设定请求缓冲
    client_header_buffer_size    128k;
    large_client_header_buffers  4 128k;
    #上传⽂件的⼤⼩限制默认1m
    client_max_body_size 8m;
3.2.3.1 server
  • 这块和虚拟主机有密切关系,虚拟主机从用户角度看,和一台独立的硬件主机是完全一样的,该技术的产生是为了节省互联网服务器硬件成本。
  • 每个 http 块可以包括多个 server 块,而每个 server 块就相当于一个虚拟主机
  • 而每个 server 块也分为全局 server 块,以及可以同时包含多个 location 块
server {
	#单连接请求上限次数。
    keepalive_requests 120;
    #监听端⼝
    listen       80;   
    #监听地址
    server_name  blog.13sai.com;  
    #设定⽇志格式
    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  /data/logs/access.log  main;
    # 根⽬录
    root /www/web/public; 
    # 定义错误提⽰页⾯
    error_page   500 502 503 504 /50x.html;

常用:
listen       80; # 配置了这个,以下的server_name不生效

server_name  localhost;

server_name  可以设成服务器的IP地址,因为域名解析后有IP,所以可以设置成IP地址,先匹配IP后匹配域名

3.2.3.1.1 location块
  • 一个 server 块可以配置多个 location 块。
  • 主要作用是根据请求地址路径的匹配,匹配成功进行特定的处理
  • 这块的主要作用是基于 Nginx 服务器接收到的请求字符串,对虚拟主机名称之外的字符串进行匹配,对特定的请求进行处理。地址定向、数据缓存和应答控制等功能,还有许多第三方模块的配置也在这里进行。
location /static/ {
    #root与alias主要区别在于nginx如何解释location后⾯的uri,这会使两者分别以不同的⽅式将请求映射到服务器⽂件上。
    #root的处理结果是:root路径+location路径
    #alias的处理结果是:使⽤alias路径替换location路径
    alias /www/static/;
    #过期30天,静态⽂件不怎么更新,过期可以设⼤⼀点,如果频繁更新,则可以设置得⼩⼀点。
    expires 30d;
}
location / {
    proxy_set_header Host $host;
    proxy_set_header  X-Real-IP  $remote_addr;
    proxy_pass  http://blog;  #请求转向blog 定义的服务器列表
}

location表达式

location [=|~|~*|^~] /uri/ {}
  • =     严格匹配。如果请求匹配这个location,那么将停止搜索并立即处理此请求
  • ~     区分大小写匹配(可用正则表达式)
  • ~*    不区分大小写匹配(可用正则表达式)
  • !~    区分大小写不匹配
  • !~*   不区分大小写不匹配
  • ^~    如果把这个前缀用于一个常规字符串,前缀匹配。不支持正则。
  • 常规字符串匹配,多个符合则选最长的,如 location / { }

优先级

  • 等号类型(=)的优先级最⾼。⼀旦匹配成功,则不再查找其他匹配项;
  • 前缀普通匹配(^~)优先级次之。不⽀持正则表达式。使⽤前缀匹配,如果有多个location匹配的话,则使⽤表达式最长的那个;
  • 正则表达式类型(~ ~*)的优先级次之。⼀旦匹配成功,则不再查找其他匹配项,也就是顺序匹配;
  • 常规字符串匹配,如果有多个location匹配的话,则使⽤表达式最长的那个

路径映射问题

  • alias

    不会拼接URL,(替换请求路径,从/blog开始),别名

location ^~ /blog/ {  
   alias /static/;  
}
请求:[http://aguo.pro](http://aguo.pro) /blog/abc/2.jpg

实际:[http://aguo.pro](http://aguo.pro) /static/2.jpg
  • root
    拼接字符串,也就是会转为根路径
location ^~ /blog/ {  
   root  /static/;  
}
请求:[http://aguo.pro](http://aguo.pro) /blog/abc/2.jpg

实际:[http://aguo.pro](http://aguo.pro) /static/blog/abc/2.jpg

4.使用详解

4.1 代理模式

4.1.1 正向代理

客服端知道服务器实际IP

4.1.2 反向代理

隐藏服务器IP地址,服务器访问虚拟主机

4.1.3 应用案例

URL分发,根据URL分发服务器

server {
    listen       80;
    # 进行路径匹配,匹配到edu代理到8081
    location ~/a/ {
    	proxy_pass http://localhost:8081;
    }
    # 进行路径匹配,匹配到vod代理到8082
    location ~/b/ {
    	proxy_pass http://localhost:8082;
    }
}

访问

http://localhost:80/a

http://localhost:80/b

出现的结果均不同

4.2 负载均衡

简单来说就是使用分布式的场景,将原先的一台服务器做成一个集群,然后将请求分发到各个服务器上,分解压力,实现负载均衡。

4.2.1 配置文件

# 在http块中的全局块中配置
# upstream固定写法 后面的blog可以自定义
upstream blog{
    server 192.168.80.100:8080;
    server 192.168.80.100:8081;
}

# server配置
    server {
      # 监听80端口
        listen 80;   
    	#location块
        location / {
# 反向代理到上面的两台服务器 写上自定义的名称
        proxy_pass http://blog;
        }
    }

4.2.2 upstream中其他规则

  • (默认)轮询
    每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器宕机会自动剔除。
  • weight 权重
    权重越高,该服务器收到的请求越多
upstream blog{
    server 192.168.80.100:8080 weight=2;
    server 192.168.80.100:8081 weight=1;
}
weight = 2,错误写法,不能有空格 否则报错
  • ip_hash

通过哈希函数计算客户端的IP来选择服务器,保证session共享

upstream blog{
    server 192.168.80.100:8080;
    server 192.168.80.100:8081;
    ip_hash;
}
  • fair
    自动根据服务器的响应速度来决定分配的权重
upstream blog{
    server 192.168.80.100:8080;
    server 192.168.80.100:8081;
    fair;
}

4.3 动静分离

  • 概述
    • 将静态资源 css html js等和动态资源(请求)进行分开部署,将静态资源直接部署在专门的服务器上,也可以直接放在反向代理服务器上(Nginx)所在在的服务器上 然后动态资源还是部署在服务器上,如tomcat。
    • 然后请求来的时候,静态资源从专门的静态资源服务器获取,动态资源还是转发到后端服务器上。
  • 案例
    说明:
    • localhost:8080 放静态文件
    • localhost:8888 放动态文件
  • nginx配置
    server {
        listen       80;
        server_name  localhost;

        location / { 
            root   html;
            index  index.html index.htm;
		   proxy_pass http://localhost:8080; #解析其他项目
        }
        
        location ^~ /blog/static {
          proxy_pass http://localhost:8080; #静态文件
        }
        
        location ~ /blog/static/index.html {
          proxy_pass http://localhost:8080; # 首页静态文件
        }
        
        location ~ /blog {
          proxy_pass http://localhost:8888; #处理后端java动态
          
        }
        
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }

    }

4.4 nginx集群

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值