首页 > 技术文章 > nginx在asp.net mvc项目中 配置 初步快速入门

han1982 2018-09-05 09:54 原文

nginx 官方下载地址

http://nginx.org/en/download.html

一般.net项目要运行在IIS环境下,自然选择windows版下载

我这里下载了nginx/Windows-1.14.0并解压包,conf目录下找到nginx.conf文件,使用记事本方式打开。

里面主要分为几大块,全局块、events块、http块、server块和location块。

下面是设置好的配置文件。

#########-全局块-#########

#user administrator administrators;  #配置用户或者组
worker_processes  1; #允许生成的进程数,默认为1
#pid        logs/nginx.pid; #指定nginx进程运行文件存放地址
error_log   logs/error.log error;  #制定日志路径,级别:debug|info|notice|warn|error|crit|alert|emerg 

########-events块-########
events {
    accept_mutex on;   #设置网路连接序列化,防止惊群现象发生,默认为on
    multi_accept on;  #设置一个进程是否同时接受多个网络连接,默认为off
    #use epoll;      #事件驱动模型,select|poll|kqueue|epoll|resig|/dev/poll|eventport
    worker_connections  1024; #最大连接数
}

#########-http块-#########
http {
    include       mime.types;  #文件扩展名与文件类型映射表
    default_type  application/octet-stream;  #默认文件类型,默认为text/plain

    #access_log off; #取消服务日志
    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; #允许sendfile方式传输文件
    #tcp_nopush     on;

    #keepalive_timeout  0;
    keepalive_timeout  65; #连接超时时间

    #gzip  on;

    upstream mysvr.com {
    server 127.0.0.1:8080 weight=8;
    server 127.0.0.1:8081 weight=9;
    }

    server {
        listen       80;  #监听端口
        server_name  127.0.0.1;   #监听地址

        #charset koi8-r;
        #access_log  logs/host.access.log  main;

        location / {
            #root   html; #根目录
            #index  index.html index.htm; #设置默认页
            random_index on;  #随机访问服务器
            #设置主机头和客户端真实地址,以便服务器获取客户端真实IP
            proxy_set_header    X-Real-IP           $remote_addr;
            proxy_set_header    X-Forwarded-For     $proxy_add_x_forwarded_for;
            proxy_set_header    Host                $http_host;
            proxy_set_header    X-NginX-Proxy       true;
            proxy_set_header    Connection          "";
            proxy_http_version  1.1;
            proxy_connect_timeout 1; 
            proxy_send_timeout 30; 
            proxy_read_timeout 60;
            client_max_body_size 50m;
            client_body_buffer_size 256k;
            proxy_pass  http://mysvr.com;  #请求转向mysvr 定义的服务器列表
        }

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

    }

}

#号代表注释,这里主要说明下server块和location块。

server块中 listen       80   顾名思义这是nginx启动后监听的端口,server_name就是监听IP地址,部署的时候要填写外网IP就可以了。

location块中 root是访问根目录,index是默认页,我们这里使用proxy_pass反向代理转发其他服务器地址就先注释掉了。
接下来说下,proxy_pass 配置
proxy_pass  http://mysvr.com;   mysvr.com是自定义的名字,通过上面定义的upstream块映射获取server地址访问。

upstream mysvr.com {
    server 192.168.1.10:8080;
    server 192.168.1.10:8081;
    }
    默认方式:依照轮询,方式进行负载,每一个请求按时间顺序逐一分配到不同的后端服务器。假设后端服务器down掉。能自己主动剔除。尽管这样的方式简便、成本低廉。但缺点是:可靠性低和负载分配不均衡。
upstream mysvr.com {
    server 192.168.1.10:8080 weight=8;
    server 192.168.1.10:8081 weight=9;
    }
weight几率方式:指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况,如果后端服务器down掉,能自动剔除。

upstream mysvr.com {
ip_hash; server 192.168.1.10 weight=8; server 192.168.2.10 weight=9; }
ip_hash:每个请求按照发起客户端的ip的hash结果进行匹配,这样的算法下一个固定ip地址的客户端总会访问到同一个后端服务器,这也在一定程度上解决了集群部署环境下session共享的问题。

upstream mysvr.com{      
      server 192.168.1.10
      server 192.168.2.10
      fair; 
}
fair(第三方)按后端服务器的响应时间来分配请求,响应时间短的优先分配。与weight分配策略类似。

 upstream mysvr.com{
      server 192.168.1.10:8080;
      server 192.168.1.10:8081;
      hash $request_uri;
      hash_method crc32;
}
url_hash(第三方)按访问url的hash结果来分配请求,使每一个url定向到同一个后端服务器。后端服务器为缓存时比較有效。
注意:在upstream中加入hash语句。server语句中不能写入weight等其他的參数,hash_method是使用的hash算法。


upstream还能够为每一个设备设置状态值,这些状态值的含义分别例如以下:

down 表示单前的server临时不參与负载.

weight 默觉得1.weight越大,负载的权重就越大。

max_fails :同意请求失败的次数默觉得1.当超过最大次数时,返回proxy_next_upstream 模块定义的错误.

fail_timeout : max_fails次失败后。暂停的时间。

backup: 其他全部的非backup机器down或者忙的时候,请求backup机器。所以这台机器压力会最轻。

upstream bakend{ #定义负载均衡设备的Ip及设备状态
      ip_hash;
      server 10.0.0.11:9090 down;
      server 10.0.0.11:8080 weight=2;
      server 10.0.0.11:6060;
      server 10.0.0.11:7070 backup;
}


都配置好后,就可以启动nginx了,双击nginx.exe运行也可以。
或者打开cmd窗口,进入nginx目录下运行start nginx 启动。
运行nginx.exe -s reload 重启。
nginx.exe -s stop 停止服务。

推荐阅读