Nginx 入门实战--Nginx 常用配置参数说明

Posted 且行且码

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Nginx 入门实战--Nginx 常用配置参数说明相关的知识,希望对你有一定的参考价值。

Nginx 中包含众多的参数,这些参数影响 Nginx 的行为;本文主要介绍一些常用的参数。

1、Nginx 配置文件基本结构

Nginx 的配置文件为 conf/nginx.conf,配置文件由配置指令/参数组成,有些指令/参数位于 main 的位置(如:events、http),有些指令/参数位于其他参数下(如:server 位于 http 下);以下是一个简单的 Nginx 配置文件样例,其中配置了一个端口为 8080 的 http 服务,还配置了一个端口为 9090 的 TCP 服务。

worker_processes  1;

events 
    worker_connections  1024;


http 
    include       mime.types;
    default_type  application/octet-stream;

    sendfile        on;
    keepalive_timeout  65;

    server 
        listen       8080;
        server_name  localhost;

        location / 
            root   html;
            index  index.html index.htm;
        

        error_page   500 502 503 504  /50x.html;
        location = /50x.html 
            root   html;
        
    


stream 
    server 
        listen 9090;
        proxy_pass 10.49.196.30:9090;
    

2、常用参数说明

参数 说明 默认值 位置
access_log path [format [buffer=size] [gzip[=level]] [flush=time] [if=condition]];
access_log off;
设置访问日志文件及日志格式 access_log logs/access.log combined; http, server, location, if in location, limit_except
access_log path [format [buffer=size] [gzip[=level]] [flush=time] [if=condition]];
access_log off;
设置访问日志文件及日志格式   http, server, location, if in location, limit_except
add_header name value [always]; 添加响应头   http, server, location, if in location
alias path; 设置目录别名,location 必须用 "/" 结束;文件的路径通过将 URI 去除location 部分再添加到 alias 指令的值来构建。   location
allow address | CIDR | unix: | all; 设置允许访问的地址   http, server, location, limit_except
auth_basic string | off; 使用“HTTP基本身份验证”协议对用户名和密码进行验证 auth_basic off; http, server, location, limit_except
auth_basic_user_file file; 设置用户名/密码文件   http, server, location, limit_except
autoindex on | off; 是否列出目录下的文件 autoindex off; http, server, location
autoindex_exact_size on | off; on:显示文件的确切大小,单位为 byte;off:显示文件的大概大小,单位为 K、M、G autoindex_exact_size on; http, server, location
autoindex_localtime on | off; on:显示文件的本地时间;off:显示文件的 UTC 时间 autoindex_localtime off; http, server, location
charset charset | off; 将指定的字符集添加到“Content-Type”响应头中  charset off; http, server, location, if in location
client_body_buffer_size size; 设置客户端请求正文的缓冲区大小 client_body_buffer_size 8k|16k; http, server, location
client_header_buffer_size size; 设置客户端请求头的缓冲区大小 client_header_buffer_size 1k; http, server
client_max_body_size size; 设置客户端请求正文的最大允许大小 client_max_body_size 1m; http, server, location 
default_type mime-type;  定义响应的默认 MIME 类型  efault_type text/plain;  http, server, location
deny address | CIDR | unix: | all;  设置拒绝访问的地址    http, server, location, limit_except
error_log file [level]; 设置日志文件及日志级别 error_log logs/error.log error; main, http, mail, stream, server, location
error_page code ... [=[response]] uri;  设置错误页面 uri   http, server, location, if in location
events ... 连接相关配置上下文   main
gzip on | off; 响应是否使用 gzip 压缩  gzip off; http, server, location, if in location
http ... Http 配置上下文    main
include file | mask; 通过文件名或文件权限码引入文件   any
index file ...; 设置初始页面文件;可以设置多个文件,Nginx 会按照指定顺序来检查,在找到一个存在的文件后停止检查。 index index.html; http, server, location
ip_hash; 基于客户端 IP 分配请求的负载均衡方法   upstream
keepalive_timeout timeout [header_timeout]; 第一个参数设置保持活动状态的超时时间,第二个参数设置响应头:Keep-Alive: timeout=time keepalive_timeout 75s; http, server, location
large_client_header_buffers number size; 设置大客户端请求头的缓冲区数量和大小 large_client_header_buffers 4 8k;  http, server 
least_conn; 一种负载均衡算法:请求被分配给具有最少活动连接数的服务器   upstream
limit_conn zone number; [ngx_http_limit_conn_module]设置使用的共享内存区域及最大并发连接数;如:limit_conn perserverZone 5;   http, server, location
limit_conn zone number; [ngx_stream_limit_conn_module]设置使用的共享内存区域及最大并发连接数;如:limit_conn perserverZone 5;   stream, server
limit_conn_zone key zone=name:size; [ngx_http_limit_conn_module]设置共享内存区域,包括存储的 key、区域名称及区域大小;如:limit_conn_zone $server_name zone=perserverZone:10m;   http
limit_conn_zone key zone=name:size; [ngx_stream_limit_conn_module]设置共享内存区域,包括存储的 key、区域名称及区域大小;如:limit_conn_zone $server_name zone=perserverZone:10m;   stream
limit_req zone=name [burst=number] [nodelay | delay=number]; 设置使用的共享内存区域、超过请求速率的缓存队列大小、缓存中的请求不延迟处理(nodelay)或延迟处理的个数(delay=number);如:limit_req zone=peripZone burst=5 nodelay;   http, server, location
limit_req_zone key zone=name:size rate=rate [sync]; 设置共享内存区域,包括存储的 key、区域名称、区域大小以及请求速率;如:limit_req_zone $binary_remote_addr zone=peripZone:10m rate=100r/m;   http

listen address[:port] [default_server] [ssl] [http2 | spdy] [proxy_protocol]
[setfib=number] [fastopen=number] [backlog=number] [rcvbuf=size] [sndbuf=size]
[accept_filter=filter] [deferred] [bind] [ipv6only=on|off] [reuseport]
[so_keepalive=on|off|[keepidle]:[keepintvl]:[keepcnt]];

listen port [default_server] [ssl] [http2 | spdy] [proxy_protocol]
[setfib=number] [fastopen=number] [backlog=number] [rcvbuf=size]
[sndbuf=size] [accept_filter=filter] [deferred] [bind] [ipv6only=on|off]
[reuseport] [so_keepalive=on|off|[keepidle]:[keepintvl]:[keepcnt]];

listen unix:path [default_server] [ssl] [http2 | spdy] [proxy_protocol]
[backlog=number] [rcvbuf=size] [sndbuf=size] [accept_filter=filter]
[deferred] [bind] [so_keepalive=on|off|[keepidle]:[keepintvl]:[keepcnt]];

设置监听地址,可以同时指定地址和端口,也可以仅指定地址或端口。  listen *:80 | *:8000;  server

location [ = | ~ | ~* | ^~ ] uri ...
location @name ...

配置 URI   server, location
log_format name [escape=default|json|none] string ...; [ngx_http_log_module]定义日志格式,通过 name 指定日志格式的名称 log_format combined "..."; http
log_format name [escape=default|json|none] string ...; [ngx_stream_log_module]定义日志格式,通过 name 指定日志格式的名称   stream
pid file; 设置主进程的进程ID文件 pid logs/nginx.pid; main
proxy_buffer_size size; 设置第一代理服务器响应缓冲区大小 proxy_buffer_size 4k|8k; http, server, location
proxy_buffering on | off; 是否开启代理服务器响应缓冲区 proxy_buffering on; http, server, location
proxy_buffers number size; 设置代理服务器响应缓冲区数量和大小 proxy_buffers 8 4k|8k; http, server, location
proxy_busy_buffers_size size; 设置在响应未完全读取的情况下可以用于向客户端发送响应的所有缓冲区的总大小 proxy_busy_buffers_size 8k|16k; http, server, location
proxy_connect_timeout time; 设置与代理服务器建立连接的超时时间 proxy_connect_timeout 60s; http, server, location
proxy_read_timeout time; 设置从代理服务器读取响应的超时时间 proxy_read_timeout 60s; http, server, location
proxy_send_timeout time; 设置向代理服务器传输请求的超时时间 proxy_send_timeout 60s; http, server, location
proxy_pass URL;  设置代理地址   location, if in location, limit_except
proxy_set_header field value; 重新定义传递给代理服务器的请求头 proxy_set_header Host $proxy_host;
proxy_set_header Connection close;
http, server, location
root path; 设置请求的根目录。仅通过将 URI 添加到 root 指令的值来构建文件的路径。如果必须修改URI,则应使用 alias 指令。 root html; http, server, location, if in location
sendfile on | off; 是否使用 sendfile() 方法 sendfile off; http, server, location, if in location
server ...  虚拟服务器配置    http
server_name name ...; 设置虚拟服务器的名称  server_name "";  server
ssl_certificate file;  设置虚拟服务器的 PEM 格式证书文件   http, server
ssl_certificate_key file;  设置虚拟服务器的 PEM 格式密钥文件   http, server
ssl_ciphers ciphers; 设置启用的密码套件 ssl_ciphers HIGH:!aNULL:!MD5; http, server
ssl_client_certificate file; 设置用于验证客户端证书的 CA 证书   http, server
ssl_prefer_server_ciphers on | off; 当使用 SSLv3 和 TLS 协议时,服务器密码套件释放优先于客户端密码套件 ssl_prefer_server_ciphers off; http, server
ssl_session_cache off | none | [builtin[:size]] [shared:name:size]; 设置会话缓存的类型和大小 ssl_session_cache none; http, server
ssl_session_timeout time; 设置 session 超时时间 ssl_session_timeout 5m; http, server
ssl_verify_client on | off | optional | optional_no_ca; 是否启用对客户端证书的验证 ssl_verify_client off; http, server
stream ... TCP 配置上下文   main
stub_status;  开启查看基本状态信息    server, location
tcp_nopush on | off; 是否启用 FreeBSD 上的 TCP_NOPUSH 套接字选项或 Linux 上的 TCP_CORK 套接字选项;该选项仅在使用 sendfile 时有效。 tcp_nopush off; http, server, location
try_files file ... uri;
try_files file ... =code;
按指定顺序检查文件,并使用第一个找到的文件处理请求   server, location
worker_connections number; 设置工作进程最大并发连接数 worker_connections 512; events
worker_processes number | auto; 设置工作进程的数量 worker_processes 1; main
use method; 指定要使用的连接处理方法。通常不需要显式指定,nginx 默认会使用最有效的方法。连接方法的详细说明可参考:https://nginx.org/en/docs/events.html。   events
user user [group]; 设置工作进程的用户和组 user nobody nobody; main
       

 

 

参考:https://nginx.org/en/docs/dirindex.html

Nginx 简易教程

 


更新、更全的《Go从入门到放弃》的更新网站,更有python、go、人工智能教学等着你:https://www.cnblogs.com/nickchen121/p/11517502.html

 

Go语言的依赖管理随着版本的更迭正逐渐完善起来。

一、依赖管理

二、为什么需要依赖管理

最早的时候,Go所依赖的所有的第三方库都放在GOPATH这个目录下面。这就导致了同一个库只能保存一个版本的代码。如果不同的项目依赖同一个第三方的库的不同版本,应该怎么解决?

三、godep

Go语言从v1.5开始开始引入vendor模式,如果项目目录下有vendor目录,那么go工具链会优先使用vendor内的包进行编译、测试等。

godep是一个通过vender模式实现的Go语言的第三方依赖管理工具,类似的还有由社区维护准官方包管理工具dep

3.1 安装

执行以下命令安装godep工具。

go get github.com/tools/godep

3.2 基本命令

安装好godep之后,在终端输入godep查看支持的所有命令。

godep save     将依赖项输出并复制到Godeps.json文件中
godep go       使用保存的依赖项运行go工具
godep get      下载并安装具有指定依赖项的包
godep path     打印依赖的GOPATH路径
godep restore  在GOPATH中拉取依赖的版本
godep update   更新选定的包或go版本
godep diff     显示当前和以前保存的依赖项集之间的差异
godep version  查看版本信息

使用godep help [command]可以看看具体命令的帮助信息。

3.3 使用godep

在项目目录下执行godep save命令,会在当前项目中创建Godepsvender两个文件夹。

其中Godeps文件夹下有一个Godeps.json的文件,里面记录了项目所依赖的包信息。 vender文件夹下是项目依赖的包的源代码文件。

3.4 vender机制

Go1.5版本之后开始支持,能够控制Go语言程序编译时依赖包搜索路径的优先级。

例如查找项目的某个依赖包,首先会在项目根目录下的vender文件夹中查找,如果没有找到就会去$GOAPTH/src目录下查找。

3.5 godep开发流程

  1. 保证程序能够正常编译
  2. 执行godep save保存当前项目的所有第三方依赖的版本信息和代码
  3. 提交Godeps目录和vender目录到代码库。
  4. 如果要更新依赖的版本,可以直接修改Godeps.json文件中的对应项

四、go module

go module是Go1.11版本之后官方推出的版本管理工具,并且从Go1.13版本开始,go module将是Go语言默认的依赖管理工具。

4.1 GO111MODULE

要启用go module支持首先要设置环境变量GO111MODULE,通过它可以开启或关闭模块支持,它有三个可选值:offonauto,默认值是auto

  1. GO111MODULE=off禁用模块支持,编译时会从GOPATHvendor文件夹中查找包。
  2. GO111MODULE=on启用模块支持,编译时会忽略GOPATHvendor文件夹,只根据 go.mod下载依赖。
  3. GO111MODULE=auto,当项目在$GOPATH/src外且项目根目录有go.mod文件时,开启模块支持。

简单来说,设置GO111MODULE=on之后就可以使用go module了,以后就没有必要在GOPATH中创建项目了,并且还能够很好的管理项目依赖的第三方包信息。

使用 go module 管理依赖后会在项目根目录下生成两个文件go.modgo.sum

4.2 GOPROXY

Go1.11之后设置GOPROXY命令为:

export GOPROXY=https://goproxy.cn

Go1.13之后GOPROXY默认值为https://proxy.golang.org,在国内是无法访问的,所以十分建议大家设置GOPROXY,这里我推荐使用goproxy.cn

go env -w GOPROXY=https://goproxy.cn,direct

4.3 go mod命令

常用的go mod命令如下:

go mod download    下载依赖的module到本地cache(默认为$GOPATH/pkg/mod目录)
go mod edit        编辑go.mod文件
go mod graph       打印模块依赖图
go mod init        初始化当前文件夹, 创建go.mod文件
go mod tidy        增加缺少的module,删除无用的module
go mod vendor      将依赖复制到vendor下
go mod verify      校验依赖
go mod why         解释为什么需要依赖
```

## go.mod

go.mod文件记录了项目所有的依赖信息,其结构大致如下:

module github.com/Q1mi/studygo/blogger

go 1.12

require (
	github.com/DeanThompson/ginpprof v0.0.0-20190408063150-3be636683586
	github.com/gin-gonic/gin v1.4.0
	github.com/go-sql-driver/mysql v1.4.1
	github.com/jmoiron/sqlx v1.2.0
	github.com/satori/go.uuid v1.2.0
	google.golang.org/appengine v1.6.1 // indirect
)
```

其中,

  • module用来定义包名
  • require用来定义依赖包及版本
  • indirect表示间接引用


### 4.3.1 依赖的版本

go mod支持语义化版本号,比如go get foo@v1.2.3,也可以跟git的分支或tag,比如go get foo@master,当然也可以跟git提交哈希,比如go get foo@e3702bed2。关于依赖的版本支持以下几种格式:



```go
gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7
gopkg.in/vmihailenco/msgpack.v2 v2.9.1
gopkg.in/yaml.v2 <=v2.2.1
github.com/tatsushid/go-fastping v0.0.0-20160109021039-d7bb493dee3e
latest
```

### 4.3.2 replace

在国内访问golang.org/x的各个包都需要翻墙,你可以在go.mod中使用replace替换成github上对应的库。



```go
replace (
	golang.org/x/crypto v0.0.0-20180820150726-614d502a4dac => github.com/golang/crypto v0.0.0-20180820150726-614d502a4dac
	golang.org/x/net v0.0.0-20180821023952-922f4815f713 => github.com/golang/net v0.0.0-20180826012351-8a410e7b638d
	golang.org/x/text v0.3.0 => github.com/golang/text v0.3.0
)
```

## 4.4 go get

在项目中执行go get命令可以下载依赖包,并且还可以指定下载的版本。

  1. 运行go get -u将会升级到最新的次要版本或者修订版本(x.y.z, z是修订版本号, y是次要版本号)
  2. 运行go get -u=patch将会升级到最新的修订版本
  3. 运行go get package@version将会升级到指定的版本号version

如果下载所有依赖可以使用go mod download命令。



## 4.5 整理依赖

我们在代码中删除依赖代码后,相关的依赖库并不会在go.mod文件中自动移除。这种情况下我们可以使用go mod tidy命令更新go.mod中的依赖关系。



## 4.6 go mod edit


### 4.6.1 格式化

因为我们可以手动修改go.mod文件,所以有些时候需要格式化该文件。Go提供了一下命令:



```bash
go mod edit -fmt
```

### 4.6.2 添加依赖项


```bash
go mod edit -require=golang.org/x/text
```

### 4.6.3 移除依赖项

如果只是想修改go.mod文件中的内容,那么可以运行go mod edit -droprequire=package path,比如要在go.mod中移除golang.org/x/text包,可以使用如下命令:



```bash
go mod edit -droprequire=golang.org/x/text
```

关于go mod edit的更多用法可以通过go help mod edit查看。



# 五、在项目中使用go module


## 5.1 既有项目

如果需要对一个已经存在的项目启用go module,可以按照以下步骤操作:

  1. 在项目目录下执行go mod init,生成一个go.mod文件。
  2. 执行go get,查找并记录当前项目的依赖,同时生成一个go.sum记录每个依赖库的版本和哈希值。


## 5.2 新项目

对于一个新创建的项目,我们可以在项目文件夹下按照以下步骤操作:

  1. 执行go mod init 项目名命令,在当前项目文件夹下创建一个go.mod文件。
  2. 手动编辑go.mod中的require依赖项或执行go get自动发现、维护依赖。

以上是关于Nginx 入门实战--Nginx 常用配置参数说明的主要内容,如果未能解决你的问题,请参考以下文章

实战 | Nginx+keepalived 实现高可用集群

实战 | Nginx+keepalived 实现高可用集群

Nginx 简易教程

送你一份 Nginx 最佳入门手册

nginx实战操作(常用命令及配置)

Nginx从入门到实战