Nginx配置

NGINX的简单配置

1. 简单介绍

  • Nginx 是一个高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务。

  • Nginx由内核和模块组成,其中,内核的设计非常微小和简洁,完成的工作也非常简单,仅仅通过查找配置文件将客户端请求映射到一个localtion block(location是Nginx配置中的一个指令,用于URL匹配),而在这个location中所配置的每一个指令将会启动不同的模块去完成相应的工作。

2、主要特点

  • 更快:
    单次请求会得到更快的响应。
    在高并发环境下,Nginx 比其他 WEB 服务器有更快的响应。
  • 高扩展性:
    Nginx 是基于模块化设计,由多个耦合度极低的模块组成,因此具有很高的扩展性。许多高流量的网站都倾向于开发符合自己业务特性的定制模块。
  • 高可靠性:
    Nginx 的可靠性来自于其核心框架代码的优秀设计,模块设计的简单性。另外,官方提供的常用模块都非常稳定,每个 worker 进程相对独立,master 进程在一个 worker 进程出错时可以快速拉起新的 worker 子进程提供服务。
  • 低内存消耗:
    一般情况下,10000个非活跃的 HTTP Keep-Alive 连接在 Nginx 中仅消耗 2.5MB 的内存,这是 Nginx 支持高并发连接的基础。
    单机支持10万以上的并发连接:理论上,Nginx 支持的并发连接上限取决于内存,10万远未封顶。
  • 热部署:
    master 进程与 worker 进程的分离设计,使得 Nginx 能够提供热部署功能,即在 7x24 小时不间断服务的前提下,升级 Nginx 的可执行文件。当然,它也支持不停止服务就更新配置项,更换日志文件等功能。
  • 最自由的 BSD 许可协议:
    这是 Nginx 可以快速发展的强大动力。BSD 许可协议不只是允许用户免费使用 Nginx ,它还允许用户在自己的项目中直接使用或修改 Nginx 源码,然后发布。

3、主要功能

  • 反向代理
    反向代理服务器位于客户端浏览器和web服务器之间,客户端不能直接向web服务器发请求,所有的请求都必须先发给反向代理服务器,然后由反向代理服务器转发给web服务器,同样,web服务器返回的响应也要先发给反向代理服务器,然后再转发给客户端。反向代理服务器发挥反向代理作用时就起到了一个中转站的作用。
    Nginx配置_第1张图片
    保存配置文件后启动Nginx,这样当我们访问localhost的时候,就相当于访问localhost:8080了

    反向代理服务器可实现三大功能:

    1. 保护网站安全。客户端无法直接访问到网站的web服务器,所有请求必须先经过反向代理服务器,相当于在web服务器和可能的网络攻击之间建立了一个屏障。

    2. 缓存网站的静态资源,提高网站的响应速度。当用户第一次访问静态内容的时候,静态内容就被缓存在反向代理服务器上,这样当其他用户访问该静态内容的时候,就可以直接从反向代理服务器返回,加速web请求响应速度,减轻web服务器负载压力。

    3. 负载均衡。反向代理服务器位于web服务器前面,这个位置正好也是负载均衡服务器的位置,所以大多数反向代理服务器同时提供负载均衡的功能。

  • 正向代理
    正向代理,意思是一个位于客户端和原始服务器(origin server)之间的服务器,为了从原始服务器取得内容,客户端向代理发送一个请求并指定目标(原始服务器),然后代理向原始服务器转交请求并将获得的内容返回给客户端。客户端才能使用正向代理。当你需要把你的服务器作为代理服务器的时候,可以用Nginx来实现正向代理,但是目前Nginx有一个问题,那么就是不支持HTTPS

  • 负载均衡
    负载均衡也是Nginx常用的一个功能,负载均衡其意思就是分摊到多个操作单元上进行执行,例如Web服务器、FTP服务器、企业关键应用服务器和其它关键任务服务器等,从而共同完成工作任务。简单而言就是当有2台或以上服务器时,根据规则随机的将请求分发到指定的服务器上处理,负载均衡配置一般都需要同时配置反向代理,通过反向代理跳转到负载均衡。而Nginx目前支持自带3种负载均衡策略,还有2种常用的第三方策略

    负载均衡指的是多个服务器共同完成一件事情,核心是“分摊压力”。Ngnix实现负载均衡指的是将请求转发给服务器集群。Ngnix默认处理负载均衡的方式是“轮询”,我们可以通过weight来调整权重。

简单配置-权重:

upstream tomcat1 {      
    server localhost:8080 weight=9;
    server localhost:8081 weight=1;
}
 
server {
    listen 80;
    server_name www.jd.com;
    location / {
        proxy_pass http://tomcat1;
        index index.html index.htm;
    }
}
#weight 控制访问权重

简单配置-轮巡:

upstream test {
        server localhost:8080;
        server localhost:8081;
}
server {
  listen       81;
  server_name  localhost;
  client_max_body_size 1024M;
 
  location / {
    proxy_pass http://test;
    proxy_set_header Host $host:$server_port;
  }
}
#分配到不同的后端服务器,如果后端服务器下掉,能自动剔除

简单配置-ip_hash

upstream test {
    ip_hash;
    server localhost:8080;
    server localhost:8081;
}
#当我们的程序不是无状态的时候(采用了session保存数据),这时候就有一个很大的很问题了,比如把登录信息保存到了session中,那么跳转到另外一台服务器的时候就需要重新登录了,所以很多时候我们需要一个客户只访问一个服务器,那么就需要用iphash了,iphash的每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题。
  • HTTP服务器 动静分离
    动静分离是让动态网站里的动态网页根据一定规则把不变的资源和经常变的资源区分开来,动静资源做好了拆分以后,我们就可以根据静态资源的特点将其做缓存操作,这就是网站静态化处理的核心思路。

简单配置-HTTP服务器:

#Nginx本身也是一个静态资源的服务器,当只有静态资源的时候,就可以使用Nginx来做服务器,同时现在也很流行动静分离,就可以通过Nginx来实现。
server {
        listen       80;                                                        
        server_name  localhost;                                              
        client_max_body_size 1024M;
 
        location / {
               root   e:\wwwroot;
               index  index.html;
        }
}
#这样如果访问http://localhost 就会默认访问到E盘wwwroot目录下面的index.html,如果一个网站只是静态页面的话,那么就可以通过这种方式来实现部署。

简单配置-动静分离:

upstream test{ 
       server localhost:8080; 
       server localhost:8081; 
    }  
 
    server { 
        listen       80; 
        server_name  localhost; 
 
        location / { 
            root   e:\wwwroot; 
            index  index.html; 
        } 
 
        # 所有静态请求都由nginx处理,存放目录为html 
        location ~ \.(gif|jpg|jpeg|png|bmp|swf|css|js)$ { 
            root    e:\wwwroot; 
        } 
 
        # 所有动态请求都转发给tomcat处理 
        location ~ \.(jsp|do)$ { 
            proxy_pass  http://test; 
        } 
 
        error_page   500 502 503 504  /50x.html; 
        location = /50x.html { 
            root   e:\wwwroot; 
        } 
    }
#我们可以把HTML以及图片和css以及js放到wwwroot目录下,而tomcat只负责处理jsp和请求,例如当我们后缀为gif的时候,Nginx默认会从wwwroot获取到当前请求的动态图文件返回,当然这里的静态文件跟Nginx是同一台服务器,我们也可以在另外一台服务器,然后通过反向代理和负载均衡配置过去就好了,只要搞清楚了最基本的流程,很多配置就很简单了,另外localtion后面其实是一个正则表达式,所以非常灵活。

4、nginx的配置文件

基本目录:

$dir/wwwroot/                           - 网站根目录,以域名为文件夹名称
    ./xuexb.com/
    ./static.xuexb.com/
 
$dir/src/                               - 安装源包
 
$dir/local/nginx/                       - nginx相关根目录
    ./conf/                             - 配置文件
        ./nginx.conf                    - 配置主入口
        ./inc                           - 通用配置
        ./vhost/                        - 各站点的配置,以 `域名.conf` 命名
            ./xuexb.com.conf
            ./static.xuexb.com.conf
 
    ./1.11.1/                           - 各个版本的nginx
    ./1.11.2/
 
$dir/logs/                              - 日志相关目录,内以 `域名.type.log` 命名
        ./last/                         - 最新的日志
            ./xuexb.com.error.log
            ./xuexb.com.access.log
        ./back/                         - 天级备份日志
            ./20170908/
 
#这样分离之后不管是 Nginx 主程序版本升级,还是修改某个站点配置,还是快速查找某个站点日志都是得心应手~

配置文件:
/export/servers/nginx/conf/nginx.conf

/约定目录/nginx-conf/
 
    # nginx配置文件
    ./nginx.conf
 
    # nginx的其他配置
    ./mime.types
 
    # 站点配置
    ./conf/
        # 各个子站点目录
        ./www.xxoo.com.conf
        ./www.a.com.conf
        ...
#目录里存放以网站为单位的配置文件,文件名以网站域名命名,这样可以配置分离,互不影响,而且好定位问题。

你可能感兴趣的:(nginx,运维,服务器)