Nginx服务器配置

来源:互联网 发布:淘宝联盟手机版如何赚钱 编辑:程序博客网 时间:2024/06/05 20:01

nginx.conf配置文件

Nginx配置文件主要分成四部分:main(全局配置)、server(主机置)、upstream(上游服务器置,主要为反向代理、负载均衡相关配置)和locationURL匹配特定位置后的置),每部分包含若干个指令。

1) main部分设置的指令将影响其它所有部分的设置;

2) server部分的指令主要用于指定虚拟主机域名IP和端口;

3) upstream的指令用于设置一系列的后端服务器,设置反向代理及后端服务器的负载均衡;

4) location部分用于匹配网页位置(比如,根目录“/,/images,等等)。他们之间的关系式:server继承mainlocation继承serverupstream既不会继承指令也不会被继承。它有自己的特殊指令,不需要在其他地方的应用。


公司项目网络请求通过Nginx的访问顺序:

1)Nginx启动后,默认监听80端口;

2)根据正则表达式拦截项目里的所有网络请求(Location匹配)。 

3)通过proxy_pass找到要访问的上游服务器地址进行访问(upstream配置


upstream配置(上游服务器配置)

Nginx可以配置代理多台服务器,当一台服务器宕机之后,仍能保持系统可用。

upstream节点

1. http节点下,添加upstream节点。

upstream linuxidc {

      server 10.0.6.108:7080;

      server 10.0.0.85:8980;

}

2. server节点下的location节点中的proxy_pass配置为:http:// + upstream名称,即“http://linuxidc.

location / {

            root  html;

            index  index.html index.htm;

            proxy_pass http://linuxidc;

}

upstream按照轮询(默认)方式进行负载,每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除(对应的服务器)。虽然这种方式简便、成本低廉。但缺点是:可靠性低和负载分配不均衡。适用于图片服务器集群和纯静态页面服务器集群。

upstream还有其它的分配策略:

1) weight(权重) 指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况。如下所示,10.0.0.88的访问比率要比10.0.0.77的访问比率高一倍。

upstream linuxidc{

      server 10.0.0.77 weight=5;

      server 10.0.0.88 weight=10;

}

2) ip_hash(访问ip

    每个请求按访问iphash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题。

upstream favresin{

      ip_hash;

      server 10.0.0.10:8080;

      server 10.0.0.11:8080;

}

3) fair(第三方)按后端服务器的响应时间来分配请求,响应时间短的优先分配。与weight分配策略类似。

upstream favresin{      

      server 10.0.0.10:8080;

      server 10.0.0.11:8080;

      fair;

}


Nginx的基本配置

1Nginx配置文件

Nginx服务器自带的配置文件:conf文件夹------>nginx.conf

Nginx的安装目录:/usr/local/nginx-1.12.1/conf/进去查看配置文件。

进入conf文件夹:cd conf(查看自带的配置文件的内容)

/usr:这是一个非常重要的目录,用户的很多应用程序和文件都放在这个目录下。

编辑文件,使用vi nginx.config

配置文件的基本格式:

worker_processes  1;

events {

    worker_connections  1024;

}

http{

//http里面可以有多个server的配置。

server{}

server{ }

}

 

2Nginx虚拟主机的配置

为了是每个服务器可以共更多用户访问,可以将一个服务器分为很多虚拟的子服务器,每个子服务器是相互独立的;这些子服务器是根据虚拟化技术分离出来的,这样一台服务器就可以虚拟成很多子服务器,我们把子服务器叫做虚拟主机。我们搭建好Nginx服务器之后,此时只要一台Nginx服务器,这时如果我们对这台服务器进行虚拟主机配置,就可以将一个Nginx服务器分割成多台对的子服务器。

1)配置虚拟主机需要哪些步骤

Nginx中配置虚拟主机有两步:配置IP地址;绑定ip地址与虚拟主机。

2IP地址的配置

ifconfiglinux中用于显示或配置网络设备(网络接口卡)的命令,可以看到当前主机的ip地址。

SU( Switch user切换用户),可让一个普通用户切换为超级用户或其他用户,并可临时拥有所切换用户的权限,切换时需输入欲切换用户的密码;进入root模式。

访问ip地址的时候,自动转向虚拟主机;让ip地址与虚拟主机进行绑定。

加载配置文件:在别的配置文件中进行配置,然后加载。

如何创建新的空白文件touch xnzj.conf

vi xnzj.conf :编辑虚拟主机这个文件

访问IP地址的时候,进行跳转到默认的目录。监听某个ip地址

这台虚拟主机的日子文件放在哪里。

3)Nginx虚拟主机的配置

 

3Nginx日志文件配置

1Nginx日志文件格式的配置

Nginx服务器在运行的时候,会有各种操作;这些关键的操作信息会记录到文件中,这些文件叫做日志文件。日志文件的记录是有格式的,我们可以按照系统默认的格式去记录,也可以按照我们自定义的格式去记录。我们可以使用log_format指令来设置Nginx服务器的日志文件的记录格式。日志文件的信息是如何排列的。

2Nginx日志文件存储路径的配置

日志文件在记录的时候,需要存储到磁盘上,存储的路径是可以配置的。我们通过

access_log指令来配置Nginx的日志文件的存储路径。

Nginx的安装目录

access_log logs/access.log main;

不记录access_log方法:access_log off

3Nginx日志文件的切割(定期对Nginx文件进行切割,按照天对日志文件进行切割)

为了使Nginx的日志文件存储更合理、有序、我们需要将日志文件进行分开存储;比如我们可以按照时间来分开,今天的日志文件存储到一个文件中,明天的日志文件存储到一个另一个新的文件夹中,这时候就用到日志文件的切割操作。

 

4Nginx缓存配置

1)当我们在浏览器中浏览某网页时,我们会把该网页上的一些信息存储到本地,当我们第二次浏览该网页的时候,这个网页上的某些信息就可以从本地加载,这样速度就会快很多。存储到本地的这些信息,我们称为缓存;但是缓存文件过多的时候,缓存文件会非常大,影响我们正常的上网活动,故而缓存需要定期清理。

用户访问的只是某一个虚拟主机。

2)压缩功能配置:通过gzip压缩技术,可以使原来的网页内容大小压缩成原来的30%,这样用户在访问网页的时候,由于传输的内容比原来内容小,所以访问速度就会快很多。

服务器软件与服务器硬件配合,才能形成一个完整的服务器,而Nginx就是一个服务器软件。

服务器硬件---->操作系统---->服务器软件---->应用程序。

将应用程序放在Nginx服务器上,然后发布应用,让其他人进行访问。

Nginx一个高性能的跨平台服务器,支持高并发;Apache服务器并不支持高并发。Nginx支持多种操作系统.


Nginx的功能:

Nginx时一个高性能的HTTP和反向代理服务器,同时也是一个邮件代理服务器(发布应用程序,实现负载均衡,作为邮件服务器实现邮件收发)。

负载均衡:有海量用户访问服务器时,为了减少服务器压力,需要将用户引入各服务器,分担服务器的压力。好处是:加快响应速度;降低服务器崩溃的几率。

反向代理服务器(负载均衡服务器)---->应用服务器集群

Nginx服务器并不处理用户的请求,只是进行请求分发,将请求分发到应用服务器中进行处理。

Nginx的优点:实现高并发;内存消耗少;部署简单;成本低。


locationNginx配置中的一个指令,用于URL匹配.在这个location,所配置的每个指令将会启动不同的上游服务器去完成相应的工作.

负载均衡模块用于从upstream”指令定义的后端主机列表中选取一台主机。nginx先使用负载均衡模块找到一台主机,再使用upstream模块实现与这台主机的交互.

Nginx的默认端口为80,可以不写,http://localhost/  直接通过localhost进行访问,进入index.html(Nginx的欢迎页面)

双击启动Nginx服务器,直接在浏览器中进行访问:http://localhost/

适合Nginx的操作系统是Linux

修改Nginx配置文件后,要重新启动Nginx才行。

Linux 系统下搭建Nginx服务器,使用免安装版的软件。

Tomcat的默认端口为8080

#低权限的用户,可以大大提高系统的安全性。#user  nobody;  #工作衍生进程数 代表cpu的核数是1个 cpu的核数和硬件有关系。worker_processes  1; #设置错误文件存放的路径;nginx服务器出现了错误,会记录到日志文件中。#可以取消注释,错误信息,注意信息error_log logs/error.log;#error_log logs/error.log notice;#error_log logs/error.log info;#设置pid存放的路径:pid是系统控制中重要的文件(主要用于对nginx服务器进行控制)。#nginx的控制文件;去掉井号,代码就会生效。pid    logs/nginx.pid; #设置最大连接数,支持1024个连接数events {  use epoll;  worker_connections 2048;} #http协议,和网页相关的内容,http里面包含多个server。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 65;   #gzip压缩功能设置  #开启gzip压缩,对用户访问的网页,是否进行压缩处理。文件缩小,传输速度快。  gzip on;  gzip_min_length 1k;  gzip_buffers  4 16k;  gzip_http_version 1.0;  gzip_comp_level 6;  gzip_types text/html text/plain text/css text/javascript application/json application/javascript application/x-javascript application/xml;  gzip_vary on;    #http_proxy 设置  client_max_body_size  10m;  client_body_buffer_size  128k;  proxy_connect_timeout  75;  proxy_send_timeout  75;  proxy_read_timeout  75;  proxy_buffer_size  4k;  proxy_buffers  4 32k;  proxy_busy_buffers_size  64k;  proxy_temp_file_write_size 64k;  proxy_temp_path  /usr/local/nginx/proxy_temp 1 2;  # 设定负载均衡后台服务器列表   upstream backend {        #ip_hash;        server  192.168.10.100:8080 max_fails=2 fail_timeout=30s ;        server  192.168.10.101:8080 max_fails=2 fail_timeout=30s ;   }  #很重要的虚拟主机配置  server {#对某个端口进行监听    listen    80;    server_name itoatest.example.com;    root  /apps/oaapp;     charset utf-8;    access_log logs/host.access.log main;     #对 / 所有做负载均衡+反向代理    location / {      root  /apps/oaapp;      index index.jsp index.html index.htm;       proxy_pass    http://backend;       proxy_redirect off;      # 后端的Web服务器可以通过X-Forwarded-For获取用户真实IP      proxy_set_header Host $host;      proxy_set_header X-Real-IP $remote_addr;       proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;      proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;           }     #静态文件,nginx自己处理,不去backend请求tomcat    location ~* /download/ {       root /apps/oa/fs;            }    location ~ .*\.(gif|jpg|jpeg|bmp|png|ico|txt|js|css)$      {        root /apps/oaapp;        expires   7d;     }    location /nginx_status {      stub_status on;      access_log off;      allow 192.168.10.0/24;      deny all;    }     location ~ ^/(WEB-INF)/ {        deny all;      }    #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 指令开始}

main全局配置

woker_processes 2

在配置文件的顶级main部分,worker角色的工作进程的个数master进程是接收并分配请求给worker处理。这个数值简单一点可以设置为cpu的核数grep ^processor /proc/cpuinfo | wc -l,也是 auto值,如果开启了sslgzip更应该设置成与逻辑CPU数量一样甚至为2倍,可以减少I/O操作。如果nginx服务器还有其它服务,可以考虑适当减少。

worker_cpu_affinity

也是写在main部分。在高并发情况下,通过设置cpu粘性来降低由于多CPU核切换造成的寄存器等现场重建带来的性能损耗。如worker_cpu_affinity 0001 0010 0100 1000; (四核)。

worker_connections 2048

写在events部分。每一个worker进程能并发处理(发起)的最大连接数(包含与客户端或后端被代理服务器间等所有连接数)nginx作为反向代理服务器,计算公式 最大连接数 = worker_processes * worker_connections/4,所以这里客户端最大连接数是1024,这个可以增到到8192都没关系,看情况而定,但不能超过后面的worker_rlimit_nofile。当nginx作为http服务器时,计算公式里面是除以2

use epoll

写在events部分。在Linux操作系统下,nginx默认使用epoll事件模型,得益于此,nginxLinux操作系统下效率相当高。

 

http服务器

sendfile on开启高效文件传输模式sendfile指令指定nginx是否调用sendfile函数来输出文件,减少用户空间到内核空间的上下文切换。对于普通应用设为on,如果用来进行下载等应用磁盘IO重负载应用,可设置为off,以平衡磁盘与网络I/O处理速度,降低系统的负载。

keepalive_timeout 65 : 长连接超时时间,单位是秒,涉及浏览器的种类、后端服务器的超时设置、操作系统的设置等。长连接请求大量小文件的时候,可以减少重建连接的开销,但假如有大文件上传,65s内没上传完成会导致失败。如果设置时间过长,用户又多,长时间保持连接会占用大量资源(每个用户都要保持长连接)

send_timeout : 用于指定响应客户端的超时时间。这个超时仅限于两个连接活动之间的时间,如果超过这个时间,客户端没有任何活动,Nginx将会关闭连接。

 

代理模块

这个模块实现的是nginx作为反向代理服务器的功能

client_max_body_size 10m允许客户端请求的最大单文件字节数。如果有上传较大文件,请设置它的限制值.

proxy_connect_timeout 60 nginx跟后端服务器连接超时时间(代理连接超时)

proxy_read_timeout 60连接成功后,与后端服务器两个成功的响应操作之间超时时间(代理接收超时)

 

压缩模块 http_gzip

gzip on : 开启gzip压缩输出,减少网络传输

gzip_min_length 1k:设置允许压缩的页面最小字节数,页面字节数从header头得content-length中进行获取。默认值是20。建议设置成大于1k的字节数,小于1k可能会越压越大。

gzip_http_version 1.0 : 用于识别 http协议的版本,早期的浏览器不支持 Gzip压缩,用户就会看到乱码,所以为了支持前期版本加上了这个选项,如果你用了 Nginx的反向代理并期望也启用 Gzip压缩的话,由于末端通信是 http/1.0,故请设置为1.0

gzip_comp_level 6 gzip压缩比,1压缩比最小处理速度最快,9压缩比最大但处理速度最慢(传输快但比较消耗cpu)

gzip_types :匹配mime类型进行压缩,无论是否指定,text/html”类型总是会被压缩的。

gzip_proxied any Nginx作为反向代理的时候启用,决定开启或者关闭后端服务器返回的结果是否压缩,匹配的前提是后端服务器必须要返回包含”Via”的header头。

 

server虚拟主机

http服务上支持若干虚拟主机。每个虚拟主机一个对应的server配置项,配置项里面包含该虚拟主机相关的配置。每个server通过监听地址或端口来区分。

1listen监听端口,默认80,小于1024的要以root启动。可以为listen *:80、listen 127.0.0.1:80等形式。

2server_name服务器名,如localhost、www.example.com,可以通过正则匹配(用于监听要访问的主机名)

 

location

http服务中,某些特定的URL对应的一系列配置项。

root  /var/www/html 定义服务器的默认网站根目录位置。如果locationURL匹配的是子目录或文件,root没什么作用,一般放在server指令里面或/下。

index index.jsp index.html index.htm 定义路径下默认访问的文件名,一般跟着root放

proxy_pass http:/backend 请求转向名称为backend服务器列表,即反向代理,对应upstream负载均衡器。也可以proxy_pass http://ip:port。