专业编程基础技术教程

网站首页 > 基础教程 正文

Nginx的学习,指令配置详解

ccvgpt 2024-09-09 02:22:23 基础教程 6 ℃

前言

之前的文章讲解了Nginx的安装,介绍等,可以看下我之前的文章,接下来讲解nginx的配置和指令的使用。

全局属性配置

  • #user nobody,user是个主模块指令,指定Nginx Worker进程运行用户以及用户组,默认由nobody账号运行。

Nginx的学习,指令配置详解

  • error_log是个主模块指令,用来定义全局错误日志文件。日志输出级别有debug、info、notice、warn、error、crit可供选择,其中,debug输出日志最为最详细,而crit输出日志最少。
  • pid是主模块指令,用来指定进程id的存储文件位置
  • worker_processes 1; #启动进程数,根据你的电脑CPU数,1个,4个或8个

events:工作模式及连接数上限

  • use是个事件模块指令,用来指定Nginx的工作模式。Nginx支持的工作模式有select、poll、kqueue、epoll、rtsig和/dev/poll。其中select和poll都是标准的工作模式,kqueue和epoll是高效的工作模式,不同的是epoll用在Linux平台上,而kqueue用在BSD系统中。对于Linux系统,epoll工作模式是首选
  • worker_connections也是个事件模块指令,用于定义Nginx每个进程的最大连接数,默认是1024.最大客户端连接数由worker_processes和worker_connections决定,即Max_client=worker_processes*worker_connections,在作为反向代理时,max_clients变为:max_clients = worker_processes * worker_connections/4。
    进程的最大连接数受Linux系统进程的最大打开文件数限制,在执行操作系统命令“ulimit -n 65536”后worker_connections的设置才能生效。

http:处理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 {
        listen       80;
        server_name  localhost;

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

}
  • include mime.types;引用mime.types,这个类型定义了很多,当web服务器收到静态的资源文件请求时,依据请求文件的后缀名在服务器的MIME配置文件中找到对应的MIME Type,根据MIME TYPE设置并response响应类型(Content-type)。

常见的mime.types:


default_type application/octet-stream;定义的数据流,有的时候默认类型可以指定为text,这跟我们的网页发布还是资源下载是有关系的。

log_format main...;用于指定Nginx日志的输出格式。main为此日志输出格式的名称,可以在下面的access_log指令中引用。

$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" '

'"$http_user_agent" "$http_x_forwarded_for"',

远程ip – 远程用户/用户时间 请求方法(get/post) 状态 请求body长度 referer来源信息 http-user-agent 用户代理 被转发的原始请求IP,由这些属性组成日志格式。

sendfile on;指定NGINX是否调用这个函数来输出文件,对于普通的文件我们必须设置为ON,如果NGINX专门做为一个下载端的话可以关掉,好处是降低磁盘与网络的IO处理数及系统的UPTIME。

tcp_nopush on; 防止网络阻塞

autoindex on;开启目录列表访问,适合下载服务器

tcp_nodelay on;提高数据的实时响应性

keepalive_timeout;根据实际情况设置值,超时时间,客户端到服务端的连接持续有效时间,60秒内可避免重新建立连接,时间也不能设太长,太长的话,若请求数10000,都占用连接会把服务托死。

gzip on;NGINX可以压缩静态资源,比例我的静态资源有10M,压缩后只有2M,那么浏览器下载的就少了。

其他属性配置:

gzip_min_length 1k;设置允许压缩的页面最小字节数,页面字节数从header头的Content-Length中获取。默认值是0,不管页面多大都进行压缩。建议设置成大于1K的字节数,小于1K可能会越压越大。

gzip_buffers 4 16k;表示申请4个单位为16K的内存作为压缩结果流缓存,默认值是申请与原始数据大小相同的内存空间来存储gzip压缩结果

gzip_http_version 1.1;于设置识别HTTP协议版本,默认是1.1,目前大部分浏览器已经支持GZIP解压,使用默认即可。

gzip_comp_level 2;#压缩级别大小,最小1,最大9,值越小,压缩后比例越小,CPU处理更快,为1时,原10M压缩完后8M,但设为9时,压缩完可能只有2M了

gzip_types text/plain application/x-javascript text/css application/xml; 压缩类型:text,js css xml 都会被压缩

gzip_vary on; #作用是在http响应中增加一行目的是改变反向代理服务器的缓存策略

server虚拟主机配置

  • listen:用于指定虚拟主机的服务端口。
  • server_name:用来指定IP地址或者域名,多个域名之间用空格分开。
  • index:用于设定访问的默认首页地址,root指令用于指定虚拟主机的网页根目录,这个目录可以是相对路径,也可以是绝对路径。
  • Charset:用于设置网页的默认编码格式。
  • access_log logs/www.ixdba.net.access.log main:access_log用来指定此虚拟主机的访问日志存放路径,最后的main用于指定访问日志的输出格式。

在实际应用可以做如下配置。基于域名,端口,IP的虚拟主机。

1.基于域名的虚拟主机

2.基于端口的虚拟主机

3.基于Ip地址的虚拟主机

location段配置

Location主要做定位功能,根据uri来进行不同的定位。

语法:location [=|~|~*|^~] /uri/ { …}

= 开头表示精确匹配

^~ 表示uri以某个常规字符串开头,相当于匹配uri路径

~ 区分大小写的正则匹配

!~ 区分大小写不匹配

!~* 不区分大小不匹配

~* 不区分大小写的正则匹配

/ 通用匹配

匹配优先级

1. 首先匹配精准路径

2. 如果两个location都是一般匹配规则,那么会按照最长路径匹配

3. 一般匹配和正则匹配的过程是:首先会选择一般匹配过程中的大前缀匹配,但是匹配过程不会停止,最大前缀匹配只是一个临时结果,nginx还会继续检查正则location。

按照正则location在配置文件的物理顺序做匹配,如果匹配到一条正则location,就不会考虑后面的规则

以下这段设置是通过location指令来对网页URL进行分析处理,所有扩展名以.gif、.jpg、.jpeg、.png、.bmp、.swf结尾的静态文件都交给nginx处理,而expires用来指定静态文件的过期时间,这里是30天。

location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$  {
                root    /web/wwwroot/www.ixdba.net;
               expires 30d;
        }

以下这段设置是将upload和html下的所有文件都交给nginx来处理,当然,upload和html目录包含在/web/wwwroot/www.ixdba.net目录中。

     location ~ ^/(upload|html)/  {
                root    /web/wwwroot/www.ixdba.net;
                expires 30d;
        }

在最后这段设置中,location是对此虚拟主机下动态网页的过滤处理,也就是将所有以.jsp为后缀的文件都交给本机的8080端口处理。

location ~ .*.jsp$ {
    index index.jsp;      
    proxy_pass http://localhost:8080;
}

参考文献:https://blog.51cto.com/ixdba/790611

最近发表
标签列表