这些基础的东西在官方文档里面都有详细的说明 http://nginx.org/en/docs/

其实 nginx 的文档还不错,下面讲的这些在文档里面都有详细的讲解

nginx 中的指令都可以在这个 官方页面 中找到

nginx.conf 文件结构

image-20210404212419241.b9f90982

# 一条指令,由分号结尾
worker_processes  1;

# 花括号的为指令块,里面包含多个指令块
events {
    worker_connections  1024;
}

# 由 $ 符号开头的是 nginx 内置的一些变量
# log_format main '$remote_addr ....'
http {
    include       mime.types;
    default_type  application/octet-stream;
		
    # 指令之间由至少一个空格进行分割
    # 也可以使用 tap,一个 tap 表示 8 个空格,但是一般使用 4 个空格缩进比较好
    sendfile        on;
    keepalive_timeout  65;

    server {
        listen       80;
        server_name  localhost;

        location / {
            root   html;
            index  index.html index.htm;
        }
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }

}

指令详解


#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 {
    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 {
        #    deny  all;
        #}
    }


    # another virtual host using mix of IP-, name-, and port-based configuration
    #
    #server {
    #    listen       8000;
    #    listen       somename:8080;
    #    server_name  somename  alias  another.alias;

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


    # HTTPS server
    #
    #server {
    #    listen       443 ssl;
    #    server_name  localhost;

    #    ssl_certificate      cert.pem;
    #    ssl_certificate_key  cert.key;

    #    ssl_session_cache    shared:SSL:1m;
    #    ssl_session_timeout  5m;

    #    ssl_ciphers  HIGH:!aNULL:!MD5;
    #    ssl_prefer_server_ciphers  on;

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

}

user

user nobody:由操作系统的哪一个用户来执行指令

worker_processes

配置几个 worker 服务,一般配置为 CPU 核心数,或则未核心数 减 1

error_log

配置错误的日志,文件后面的为日志级别

error_log    logs/error.log;
error_log    logs/error.log    notice;
error_log    logs/error.log    info;

日志级别从低到高分别是:debug、info、notice、warn、error、crit

默认日志文件地址在我们安装的时候通过 --error-log-path=/var/log/nginx/xx.log 指定了,我们不配置的话,它自己也有默认文件地址的

pid

运行时的进程 ID 文件

events

events {
		# 默认使用 epoll,在 linux 下最合适的就是 epoll,其他平台上可能不一样
    use epoll;
    # 每个 worker 允许连接的客户端最大连接数
    worker_connections  1024;
}

http

网络传输相关的模块,是一个指令块

include

include mime.types;

在 nginx.conf 同级目录下,有一个 mime.types 文件,里面也是一个指令块内容,包含了很多的 mime type
同理,include 就可以导入你自己的其他配置文件了,通过它来进行分类重用之类的工作

log_format

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

需要配合 access_log 使用,log_format 是日志格式的指定,记录的是 http 请求相关的日志信息

[root@study conf]# cat /var/log/nginx/access.log 
192.168.56.1 - - [04/Apr/2021:16:32:44 +0800] "GET / HTTP/1.1" 200 612 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 11_2_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.150 Safari/537.36"
192.168.56.1 - - [04/Apr/2021:16:32:44 +0800] "GET /favicon.ico HTTP/1.1" 404 555 "http://192.168.56.105/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 11_2_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.150 Safari/537.36"

如上所以的日志格式,就是被注释的默认格式所格式化出来的
● remote_addr:ip 地址
● remote_user:远程用户,一般都是横杠 - 表示无法获取
● time_local:访问时间
● request:访问方法和地址还有协议
● status:响应状态
● body_bytes_sent:响应内容的大小
● http_referer:用是从哪一个链接跳转过来的
● http_user_agent:用户代理,一般写的浏览器
● http_x_forwarded_for:客户端 IP,通过代理转发后的 IP

sendfile

sendfile        on;
#tcp_nopush     on;

文件高效传输,而 tcp_nopush 需要配合 sendfile 一起使用,含义是:当数据包内容累积到一定大小的时候才会发送,相当于是定义缓存

keepalive_timeout

    #keepalive_timeout  0;
    keepalive_timeout  65;

客户端链接服务端超时的时间,http 协议里面的东西,保持长链接的空闲时间,这里单位是秒

gzip

#gzip  on;

gzip 压缩开关

server

server 也就是虚拟主机

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 {
        #    deny  all;
        #}
    }

● listen:监听端口
● server_name:可以定义 IP 或则域名
● location:路由
● error_page:发生错误的时候,使用这里响应的状态码页面展示

配置 Nginx 为静态资源提供服务

发布静态资源作为一个服务,供用户使用

我们可以这样做,创建一个 /usr/local/nginx/conf/my.conf 的文件,里面写指令,再在默认的配置文件里面 include 进去,分离我们自己的脚本文件的方式来组织配置

my.conf

server {
   listen       90;
   server_name  localhost;

   location / {
       root   /home/foodie-shop/;
       index  index.html;
   }
}

以上配置,我们将我们前端项目使用 nginx 部署了,这个时候可以访问 http://192.168.56.105:90/ 就能访问到前端项目了

另外还可以将图片等文件配置成服务,比如 /home/foodie-shop/images 下有很多图片

   location  /images{
       root   /home/foodie-shop;
   }

这种方式需要注意的是:root + location + 请求的资源链接起来要是一个主机上存在的物理路径。

那么还可以使用 别名(alias) 的方式进行映射,如下所示

   # 配置路由规则
   location /i2 {
   		 # 资源所在的物理路径
       alias   /home/foodie-shop/images;
   }