nginx

题外话:阿里云免费送了一年服务器,项目部署上去了,域名也有了,但是还少了一个反向代理和web容器工具于是乎nginx的学习十分必要了
发现自己的学习,除了最开始的很系统的从底向上从顶到底学了一遍JAVA,后来自己都是有需求就研究研究诶.


1.什么是nginx,nginx?

  • Nginx是一个高性能的Web和反向代理服务器,它具有有很多非常优越的特性:作为Web服务器:相比Apache,Nginx使用更少的资源,支持更多的并发连接,体现更高的效率,这点使Nginx尤其受到虚拟主机提供商的欢迎。能够支持高达50000个并发连接费的响应,感谢Nginx为我们选择了epoll and kqueue作为开发模型.
  • 作为负载均衡服务器:Nginx既可以在内部直接支持Rails和PHP,也可以支持作为HTTP代理服务器对外进行服务。Nginx用C编写,不论是系统资源开销还是CPU使用效率都比Perlbal要好的多
  • 作为邮件代理服务器:Nginx同时也是一个非常优秀的邮件代理服务器(最早开发这个产品的目的之一也是作为邮件代理服务器),Last.fm描述了成功并且美妙的使用经验。

优点
Nginx安装非常的简单,配置文件非常简洁(还能够支持per语法),Bugs非常少的服务器:Nginx启动特别容易,并且几乎可以做到7*24不间断运行,即使运行数个月也不需要重新启动。你还能够在不间断服务的情况下进行软件版本的升级。

nginx可以作为web服务器,但更多的时候,我们把它作为网关
为啥?因为网关有的功能,它都可以做到,如下....而且优点上面都介绍清楚了.

  • 反向代理
  • 负载均衡
  • 动态路由
  • 请求过滤

2. web服务器类别

  • web应用服务器 (可以解析jsp和静态html css js等 )并发能力低
    • jetty
    • resin
    • tomcat (200并发)
  • web服务器 不能解析jsp但是并发能力高
    • apache服务器
    • nginx(目前最流行,可以达到5W并发)
    • IIS(微软的,功能挺多的,在window server服务器上比较流行(内置IIS,天然集成,占用80端口))

3. 代理与反向代理

  • 代理:通过客户机的配置,实现让一台服务器代理客户机,客户的所有请求都交给代理服务器处理。)
  • 反向代理:用一台服务器,代理真实服务器,用户访问时,不再是访问真实服务器,而是代理服务器
    关于两者详细区别可以点击此连接查看,文章里打的比喻比较风趣和贴切 哈

4.nginx的负载均衡

Nginx提供的负载均衡策略有2种:内置策略和扩展策略。
内置策略为轮询,加权轮询,Ip hash
扩展策略,就天马行空,只有你想不到的没有他做不到的啦,你可以参照所有的负载均衡算法,给他一一找出来做下实现。

上3个图,理解这三种负载均衡算法的实现


Ip hash算法,对客户端请求的ip进行hash操作,然后根据hash结果将同一个客户端ip的请求分发给同一台服务器进行处理,可以解决session不共享的问题。

4.nginx如何当做反向代理服务器来使用?

  • 我们需要提前在nginx中配置好反向代理的规则,不同的请求,交给不同的真实服务器处理
  • 当请求到达nginx,nginx会根据已经定义的规则进行请求的转发,从而实现路由功能
    及其适合微服务项目,大量端口需要路由

5.nginx下载

参考https://www.cnblogs.com/xxoome/p/5866475.html
下载解压好了,这里看以下nginx里有啥玩意

  • conf毫无疑问是配置目录
  • contrib是依赖
  • html默认静态页面

首先进入conf配置咱们的nginx

vi进入后编辑,这里以注释的方式解读一下配置

#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;


events {
    worker_connections  1024;//工作连接数-线程数
}


http { //http请求配置
    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        on;//是否开启文件上传功能
    #tcp_nopush     on;

    #keepalive_timeout  0;
    keepalive_timeout  65;//连接最大时间

    #gzip  on;

    server {//一个server就是一个代理
        listen       80;//监听的服务端口
        server_name  localhost;//这个主机的都默认转到80端口

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

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

        #error_page  404              /404.html;

        # redirect server error pages to the static page /50x.html
        #
        error_page   500 502 503 504  /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;
        #}
    }

参考:

菜鸟教程Nginx
nginx中文文档
Nginx 配置文件详解
运行和控制Nginx
nginx域名配置
前端项目发布到nginxweb服务器

你可能感兴趣的:(nginx)