nginx之旅

1.nginx能做什么?
    nginx是静态服务器,他的性能比tomcat,要比tomcat性能高出很多倍。用它来可以做反向代理、负载均衡、动静分离、缓存、压缩、防盗链、集成第三方插件、高可用和限流、鉴权、灰度发布等。

2.nginx的一些常用命令命令

./sbin/nginx    //启动nginx服务
./sbin/nginx -s stop   //停止nginx服务
./sbin/nginx -s reload   //重载
./sbin/nginx -t  //检查配置文件语法是否有错误
./sbin/nginx -V //查看nginx的安装目录
find -name configure //查看配置文件的位置
whereis nginx  //定位文件位置

3.当遇到[alert] kill(57676, 1) failed (3: No such process)或者[error] open() “/usr/local/nginx/logs/nginx.pid” failed (2: No such file or directory)类似的问题解决办法

/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf  //指定启动配置文件地址

4.虚拟机的配置

server {
   listen    80; //nignx的默认端口号
   server_name localhost; // 域名配置
   location / { //访问控制的匹配规则
     root  html; //根路径,这里的html可以自己随便定义
     index index.html index.htm;
   }
}

4.基于配置端口号的虚拟主机

server {
   listen    8080; //默认端口号80,配置此端口号就可以实现客户端通过8080端口访问
   server_name  localhost;
   location / {
     root html;
     index index.html;
   }

5.基于域名配置的虚拟机

server {
   listen    80;
   server_name  yqstudy.com;//需要在本机电脑的hosts配置文件加上此域名配置(可以配置多个域名)
   location / {
     root html;
     index index.html;
   }

6.location的配置规则

location = /uri 精准匹配
location ^~ /uri 前缀匹配
location ~ /uri
location / 通用匹配

7.已安装nginx下安装第三方模块

语法

./configure –prefix=/你的安装目录 --add-module=/第三方模块目录 --add-module=/第三方模块目录

这里以安装http_random_index_module和with-http_stub_status_module为例:

#find -name configure //查看配置文件的位置
#cd /usr/local/nginx-1.16.1 // 进入配置目录
#./configure --prefix=/usr/local/nginx --with-http_stub_status_module --with-#http_random_index_module //添加模块
#make 安装
#/usr/local/nginx/sbin/nginx  -s stop //停止服务器
#cp objs/nginx /usr/local/nginx/sbin/nginx //拷贝文件进行覆盖
server {
        listen 80;
        server_name yqstudy.com;
        location / {
          stub_status on; //http_stub_status_module,监听nginx的状态
          root html;
          index a.html;
        }
    }

server {
    listen 80;
    server_name yq3study.com;
    location / {
        root html;
        random_index on; //http_random_index_module html目录下的页面随机选择
     }
  }

8.反向代理

    用户发送请求,首先请求的是nginx服务器,然后通过nginx配置,将请求转发给需要转的服务器地址。代理的是服务器,这就是反向代理,正向代理是代理的客户端。

 server {
        listen       80;
       server_name  yq2study.com;
        location / {
          # proxy_pass http://www.baidu.com; //通过域名实现反向代理
           proxy_pass http://192.168.5.10:8080;//通过ip端口号实现反向代理到tomcat服务器
            root   html;
            index index.html;
        }
        error_page  404              /404.html;  //404错误跳转的页面
        error_page   500 502 503 504  /50x.html; // 500 502 503 504这些错误码跳转的页面
        location = /50x.html {
            root   html;
        }
    }

9.负载均衡

    网络负载均衡的大致原理是利用一定的分配策略将网络负载平衡地分摊到网络集群的各个操作单元上,使得单个重负载任务能够分担到多个单元上并行处理,使得大量并发访问或数据流量分担到多个单元上分别处理,从而减少用户的等待响应时间
nginx是通过upstream来实现负载均衡的

  • Upstream
    语法: server address [paramters]
  • 负载均衡策略或者算法
    轮询算法(默认), 如果有后端服务器宕机以后,会自动踢出
    ip_hash 根据请求的ip地址进行hash
    权重轮询 根据weight值,weight值越大,权重越大,请求的也就越多
upstream test {
        #ip_hash;//加了这个就不会轮询
        server 192.168.5.10:8080 weight=3; 
        server 192.168.5.12:8081 weight=1;
   }
   server {
        listen 80;
        server_name yqstudy.com;
        location / {
          proxy_pass http://test;
          root html;
          index a.html;
        }
    }

10.动静分离
    依赖服务器生成的是动,不需要依赖服务器生存的如css,图片等是静,可以直接放在nginx服务器上,这样就与tomcat服务器分离开来了,这就是动静分离。
    在Nginx的conf目录下,有一个mime.types文件,里面定义了静态资源类型。
    用户访问一个网站,然后从服务器端获取相应的资源通过浏览器进行解析渲染最后展示给用户,而服务端可以返回各种类型的内容,比如xml、jpg、png、gif、flash、MP4、html、css等等,那么浏览器就是根据mime-type来决定用什么形式来展示的服务器返回的资源给到浏览器时,会把媒体类型告知浏览器,这个告知的标识就是Content-Type,比ContentType:text/html。

11.缓存配置

    Nginx可以通过expires设置缓存,比如我们可以针对图片做缓存,因为图片这类信息基本上不会改变。

server {
        listen 80;
        server_name yqstudy.com;
        location / {
          proxy_pass http://192.168.5.10:8080;
          proxy_set_header Host $host;
          proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
          add_header 'Aceess-Control-Allow-Header' 'Content-Type,*';
        }
       location ~ .*.(jpg|jpeg|gif|bmp|png|js|css|ico)$ {
         root js;
         expires 1d;//开启静态文件缓存配置
        }
    }

12.压缩

    Nginx通过gzip进行压缩

http {
   default_type application/octet-stream;
   keepalive_timeout 60;
   server {
        listen 80;
        server_name yqstudy.com;
        location / {
          proxy_pass http://192.168.5.10:8080;
          proxy_set_header Host $host;
          proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
          add_header 'Aceess-Control-Allow-Header' 'Content-Type,*';
        }
       location ~ .*.(jpg|jpeg|gif|bmp|js|png|css|ico)$ {
        root js;
         expires 1d;
        }
    }
   gzip on; //是否开启gzip压缩
   gzip_comp_level 3; //[1-9] 压缩级别, 级别越高,压缩越小,但是会占用CPU资源
   gzip_types application/javascript; //对那些类型的文件做压缩 
   gzip_vary on;// 请求头标识
}

13.防盗链配置

    一个网站的静态资源比如图片,你不希望别人通过你的地址去访问你的资源,那么就需要配置防盗链。

location ~ .*.(gif|jpg|ico|png|css|svg|js)$ {
valid_referers none blocked 192.168.5.19;
if ($invalid_referer) {
     return 404;
}
root js;
}

14.跨域访问

    什么叫跨域呢?如果两个节点的协议、域名、端口、子域名不同,那么进行的操作都是跨域的,浏览器为了安全问题都是限制跨域访问,所以跨域其实是浏览器本身的限制。

server {
        listen 80;
        server_name yqstudy.com;
        location / {
          proxy_pass http://192.168.5.10:8080;
          proxy_set_header Host $host;
          proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
          add_header 'Access-Control-Allow-Origin' '*'; // #允许来自所有的访问地址
          add_header 'Access-Control-Allow-Methods' 'GET,PUT,POST,DELETE,OPTIONS'; //支持的请求方式
          add_header 'Aceess-Control-Allow-Header' 'Content-Type,*';//支持的媒体类型
        }
       location ~ .*.(jpg|jpeg|gif|bmp|js|png|css|ico)$ {
        root js;
        }
    }

15.通过keeplived实现nginx的集群和高可用

16.通过openRestry+lua实现nginx鉴权,灰度发布等

猜你喜欢

转载自blog.csdn.net/qq_40974235/article/details/107706409