前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >全面解析|搞懂Nginx这一篇就够了

全面解析|搞懂Nginx这一篇就够了

作者头像
浅羽技术
发布2020-12-07 11:15:08
3710
发布2020-12-07 11:15:08
举报
文章被收录于专栏:浅羽技术

前言

Nginx是一个http服务器,是一个使用c语言开发的高性能的http服务器及反向代理服务器。Nginx是一款高性能的http服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器。由俄罗斯的程序设计师Igor Sysoev所开发,官方测试Nginx能够支撑5万并发链接,并且cpu、内存等资源消耗却非常低,运行非常稳定。本文将为大家详细介绍关于Nginx的原理以及在应用场景下的相关解析。

公众号:「浅羽的IT小屋」

1. Nginx的概念?

「什么是Nginx呢:」

  • Nginx是一个基于HTTP的反向代理服务器,也是一个基IMAP/POP3/SMTP服务邮件服务器
  • 反向代理服务器:现在我们A需要访问的目标B服务器的10.7.182.100,我要访问这个B服务器上的资源,现在如果使用了Nginx之后,我可以通过Nginx服务器从而达到访问10.7.182.100这个服务器的目的
  • IMAP/POP/SMTP:这三个是邮件的传输协议
  • 邮件服务器:发送邮件 接收邮件
  • Web服务器:本身是一个Web服务器的软件,类似于Tomcat这种Web服务的软件

「Nginx能干什么呢:」

  • 可以作为Web服务器
  • 可以作为邮件服务器
  • 可以作为反向代理的服务器
  • 动静分离(就是将动态资源和静态资源分隔开)
  • 可以实现负载均衡
2、Nginx的安装

「Nginx安装步骤:」

代码语言:javascript
复制
第一步:下载我们的nginx 这里以1.6.2版本为例

第二步:共享安装文件到我们的linux上面

第三步:将文件拷贝到/usr/local下面

第四步:安装 tar -zxvf xxxx.tar.gz

第五步:下载所需要的依赖库 yum install pcre  yum install pcre-devel  yum install zlib   yum install zlib-devel

第六步:进行config的配置
cd nginx-1.6.2 && ./configure --prefix=/usr/local/nginx

第七步:安装

make && make install 

第八步:启动nginx

/usr/local/nginx/sbin/nginx

关闭: .... -s stop -s reload 

查看端口是否有问题

netstat -tunpl |grep 80

浏览器进行验证没问题就可以

3、Nginx的配置文件的解析

「配置文件:」

代码语言:javascript
复制

#user  nobody;
#工作的线程(4核8线程那么下面就设置成8 物理硬件有关)
worker_processes  1;

#全局的错误日志存放的地方
#error_log  logs/error.log;

#全局错误日志存放的地方 后面的notice表示的是输出错误日志的格式
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

#nginx进程号存放的地方
#pid        logs/nginx.pid;


#最大的连接数(这个也跟硬件是有关系的)
events {
    worker_connections  1024;
}


#下面就是跟HTTP请求有关系的了
http {
    #表示的是当前服务器支持的类型
    include       mime.types;
    #默认传输的数据类型是流 
    default_type  application/octet-stream;

    #声明了一种日志格式 这种日志格式的名字叫做  main
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    #表示的是每一次请求的日志记录 格式就是上面的main格式
    access_log  logs/access.log  main;
    
    #是否可以发送文件
    sendfile        on;
    #tcp_nopush     on;

    #这个是双活的超时的时间
    #keepalive_timeout  0;
    keepalive_timeout  65;

    #是否打开文件的压缩
    #gzip  on;

    #虚拟一个主机
   
   #负载均衡的配置
   upstream qianyu {
      ip_hash;
      server 10.7.182.110:8080;
      server 10.7.182.87:8080;
   }

    #server {
      # listen     90;
      # server_name localhost; 
      # location / {
      #    root qianyu;
      #    index qianyu.html;
      # }
      #做一个反向代理
      #表示的是 如果你访问的后缀是 .jpg结尾的话那么 就访问下面的另外的服务器
       # location ~ \.jpg$ {
       #     proxy_pass   http://10.7.182.110:8080;
       # }

      #下面要演示一个负载均衡的例子
       #location ~ \.jpg$ {
       #    proxy_pass   http://qianyu;
       #}
    #}

   #虚拟一个动静分离的机器
   server {
     listen     9999;
     server_name localhost;
     
     #表示的是动态资源访问的机器

      location / {
            proxy_pass   http://10.7.182.54:8080;
      }
     
 
    #表示的是非  css和js文件访问的地址
    location ~ .*\.(htm|html|gif|jpg|jpeg|png|bmp|swf|ioc|rar|zip|txt|flv|mid|doc|ppt|pdf|xls|mp3|wma)$
        {
            root /usr/local/webapp;
            expires 30d;
        }
      #表示的是css和js的访问地址
      location ~ .*\.(js|css)?$
       {
         root /usr/local/webapp;
         expires 1h;
       }

  }

    #虚拟了服务器
    server {
        #端口是  80
        listen       80;
        #这个表示的是虚拟服务器默认访问的是本机
        server_name  localhost;
        #这个是虚拟服务器的编码
        #charset koi8-r;
        #当前服务器的日志的存储的地方
        #access_log  logs/host.access.log  main;

        #做了一个地址的映射
        location / {
            root   html;
            index  index.html index.htm;
        }
        
        #如果报404的时候访问的页面
        #error_page  404              /404.html;

        # redirect server error pages to the static page /50x.html
        #报错50开头的是 就访问50x.html
        error_page   500 502 503 504  /50x.html;
        #下面对50x.html又做了一个映射  就访问根目录下的html中的  50x.html
        location = /50x.html {
            root   html;
        }

        # proxy the PHP scripts to Apache listening on 127.0.0.1:80
        #
        #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;
        #}
    }


    # another virtual host using mix of IP-, name-, and port-based configuration
    #
    #server {
    #    listen       8000;
    #    listen       somename:8080;
    #    server_name  somename  alias  another.alias;

    #    location / {
    #        root   html;
    #        index  index.html index.htm;
    #    }
    #}


    # HTTPS server
    #
    #server {
    #    listen       443 ssl;
    #    server_name  localhost;

    #    ssl_certificate      cert.pem;
    #    ssl_certificate_key  cert.key;

    #    ssl_session_cache    shared:SSL:1m;
    #    ssl_session_timeout  5m;

    #    ssl_ciphers  HIGH:!aNULL:!MD5;
    #    ssl_prefer_server_ciphers  on;

    #    location / {
    #        root   html;
    #        index  index.html index.htm;
    #    }
    #}

}




4、实现Nginx下的反向代理

「做一个反向代理:」

  • 表示的是如果你访问的后缀是 .jpg结尾的话,那么就访问下面的另外的服务器
代码语言:javascript
复制
location ~ \.jpg$ {
            proxy_pass   http://10.7.182.110:8080;
        }
‍5、实现Nginx下的负载均衡

「第一种策略:默认是轮循的策略:」

代码语言:javascript
复制

配置upstream
   upstream qianyu {
      server 10.7.182.110:8080;
      server 10.7.182.87:8080;
   }
   配置负载均衡
   location ~ \.jpg$ {
           proxy_pass   http://qianyu;
   }


「第二种策略:权重(weight):」

代码语言:javascript
复制
#负载均衡的配置
  upstream qianyu {
     server 10.7.182.110:8080 weight=2;
     server 10.7.182.87:8080 weight=1;
  }
 配置负载均衡
     location ~ \.jpg$ {
           proxy_pass   http://qianyu;
     }

「第三种策略:IPHash的使用:」

代码语言:javascript
复制
 #负载均衡的配置
   upstream qianyu {
      ip_hash;
      server 10.7.182.110:8080;
      server 10.7.182.87:8080;
   }
配置负载均衡
    location ~ \.jpg$ {
           proxy_pass   http://qianyu;
    }

6、实现Nginx下的动静分离

「动静分离:」

  • 简单的来说就是将动态资源和静态资源给分隔开
  • 静态资源放到Nginx服务器上
  • 动态资源放到Tomcat服务器上
代码语言:javascript
复制
Jpg   html   css    png   gif    ....静态资源  ---->放到Nginx服务器上
.action结尾的都是动态的资源     ------------------------->放到Tomcat的服务器上

「动静分离的实现:」

  • 在/usr/local目录下创建webapp文件夹
  • 在webapp目录下创建css、html、js、img文件夹
  • 编写HTML的内容并将html文件放到webapp目录下
代码语言:javascript
复制
<!DOCTYPE html>
<html>
 <head>
  <meta charset="utf-8" />
  <title></title>
  <link rel="stylesheet" type="text/css" href="/css/main.css"/>
  <script src="/js/main.js" type="text/javascript" charset="utf-8"></script>
 </head>
 <body>
  <img src="/img/bbb.jpg"/>
  <br />
  <a href="/Dynamic_Resource/qianyu.action">点击我访问动态资源</a>
 
 </body>
</html>


  • 将图片放到img目录下,将css放到css目录下,将js文件放到js的目录下
  • 编写动态资源的这个工程
代码语言:javascript
复制
package com.qy.servlet;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class qianyuServlet extends HttpServlet {

 public void doGet(HttpServletRequest request, HttpServletResponse response)
   throws ServletException, IOException {
            this.doPost(request, response);
 }

 public void doPost(HttpServletRequest request, HttpServletResponse response)
   throws ServletException, IOException {

  response.setContentType("text/html;charset=utf-8");
  PrintWriter writer=response.getWriter();
  writer.write("this is dynamic resource test");
  writer.flush();
  writer.close(); 
 }
}

  • 编写配置文件 /conf/nginx.xml文件
代码语言:javascript
复制
#虚拟一个动静分离的机器
   server {
     listen     9999;
     server_name localhost;

     #表示的是动态资源访问的机器

      location / {
            proxy_pass   http://10.7.182.54:8080;
      }
    #表示的是非  css和js文件访问的地址
    location ~ .*\.(htm|html|gif|jpg|jpeg|png|bmp|swf|ioc|rar|zip|txt|flv|mid|doc|ppt|pdf|xls|mp3|wma)$
        {
            root /usr/local/webapp;
            expires 30d;
        }
      #表示的是css和js的访问地址
      location ~ .*\.(js|css)?$
  {
         root /usr/local/webapp;
         expires 1h;
       }

  }

  • 测试

7、虚拟主机

「虚拟主机配置:」

代码语言:javascript
复制
server {
       listen     90;
       server_name localhost;
       location / {
          root qianyu;
          index qianyu.html;
       }
      #做一个反向代理
      #表示的是 如果你访问的后缀是 .jpg结尾的话那么 就访问下面的另外的服务器
        location ~ \.jpg$ {
            proxy_pass   http://10.7.182.110:8080;
        }
}

结语

本篇关于Nginx的介绍就先到这里结束了,后续会出更多关于Nginx系列更多文章,谢谢大家支持!

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-11-06,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 浅羽的IT小屋 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
    • 1. Nginx的概念?
      • 2、Nginx的安装
        • 4、实现Nginx下的反向代理
          • ‍5、实现Nginx下的负载均衡
            • 6、实现Nginx下的动静分离
            • 结语
            相关产品与服务
            云服务器
            云服务器(Cloud Virtual Machine,CVM)提供安全可靠的弹性计算服务。 您可以实时扩展或缩减计算资源,适应变化的业务需求,并只需按实际使用的资源计费。使用 CVM 可以极大降低您的软硬件采购成本,简化 IT 运维工作。
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档