Nginx:配置文件详解

Amae 2024-08-01 15:07:03 阅读 50

目录

一、Nginx配置文件

二、 主配置段的指令

1、正常运行的必备配置

2、优化性能相关的配置

3、事件相关的配置

4、用于调试 

三、Nginx作为Web服务器使用配置

 四、虚拟主机配置相关指令

1、server{}  定义一个虚拟主机

2、listen 监听端口

3、server_name 主机名

4、root  Path 设置资源路径映射

5、location 根据用户请求的URL匹配定义的location

6、aliias path 用于配置段,定义路径别名

7、index 默认页面配置

8、err_page  根据http状态码重定向错误页面

9、基于IP访问控制

10、基于用户的访问控制

11、SSL配置

12、stub_status 状态页

13、rewrite regex replacement flag URL重写标志

14、if 上下文

15、防盗链

16、定制访问日志格式

五、网络相关的配置

一、Nginx配置文件

main配置段:全局配置

events段:定义event工作模式

http {}:定义http协议配置

支持使用变量:

        内置变量:模块会提供内建变脸定义

        自定义变量:set var_name value

二、 主配置段的指令

1、正常运行的必备配置

1、user USERNAME [GROUPNAME];            #指定运行worker进程的用户 和组,例如:user nginx nginx;

2、pid /path/to/pid_file;        #指定nginx的pid文件;

3、worker_rlimit_nofile;        #指定一个worker进程所能够打开的最大文件句柄数;

4、worker_rlimit_sigpending;         #指定每个用户能够发往worker的信号的数量;

2、优化性能相关的配置

1、worker_processes #:          #worker线程的个数;通常应该为物理CPU核心个数减1;

2、worker_cpu_affinity cpumask ...;

                                      CPUMASK                        0001                        0010                        0100                        1000                     例如: worker_cpu_affinity 00000001 00000010 00000100;

3、timer_resolution t ;           #  计时器解析度,降低此值,柯减少gettimeofday()系统调用次数

4、worker_priority nice;         #对应的nice值-20 - 19,优先级对应100-139

3、事件相关的配置

1、pt_mutex {on|off} ;        (互斥锁)内部调用用户 请求至各worker时用的负载均衡锁;on时表示能让多个worker轮流地、序列化地与响应新请求;

2、lock_file /path/to/lock_file ;         #accept_mutex用到的锁文件

3、accept_mutex_delay #ms;        #work进程繁忙时锁等待多长事件

4、use [epoll|rgsig|select|poll];;        #定义使用的事件模型;建议让Nginx自动选择;

5、worker_connections;        #每个worker进程所能够响应的最大并发请求数;

4、用于调试 

1、daemon {off|on};        #是否以守护进程的方式运行nginx,调试时应该设置为off

2、master_process {on|off};        #是否以master/worker模型来运行nginx

3、error_log /path/to/error_log level;        #错误日志文件及其级别;处于调试目的,可以使用debug级别,但此级别只有在编译nginx时手机用--with-debug选项才有效; 

三、Nginx作为Web服务器使用配置

http{}:由ngx_http_core_module模块来引入

配置格式

<code>

http配置:http core 配置一个静态web服务器

ngx_http_core_module

配置框架:

http {

upstream {

.,..

}

server {

listen IP:PORT;

# 虚拟主机

location /URL {

root "/path/to/dir"

……

if ...{

...

}

}

} #每个Srever类似于httpd中的<VirtualHost>

server {

……

}

}

#注意:与httpd相关的指令仅能通够放置于http、server、location、upstream、if上下文指令仅应用于这5中上下文

 四、虚拟主机配置相关指令

1、server{}  定义一个虚拟主机

server{

listen 8080;

server_name www.hongyang.com;

root "/vhosts/web1";

}

访问:

2、listen 监听端口

完整格式:listen address[:port] [default_server] ssl 

  backlog=number: 指明TCP协议backlog队列的大小。默认为-1,表示不设置;

  rcvbuf=size:设定监听句柄的SO_RCVBUF参数;

<code>​

server{

listen 8080;

server_name www.hongyang.com;

root "/vhosts/web1";

}

3、server_name 主机名

server{

listen 8080;

server_name www.hongyang.com;

root "/vhosts/web1";

}

#(1) 先做精确匹配;www.hongyang.com:

#(2) 左侧通配符匹配,例如:*.hongyang.com;

#(3) 右侧通配符匹配,例如:www.*;

#(4) 正则表达式匹配,例如: ~^.*\.hongyang\.com$

#(5) default_server

4、root  Path 设置资源路径映射

root:用于指明请求的URL所对应的文档的根目录路径

location /imag/ {

root "/web/imgs/";

}

5、location 根据用户请求的URL匹配定义的location

允许根据用户请求的URI来匹配定义的各location,匹配到时,此请求将被相应的location块中的配置所处理;

#=: 精确匹配检查;

#~: 正则表达式模式匹配,区分字符大小写;

#~*:正则表达式模式 匹配,不区分字符大小写;

#^~:URI的前半部分匹配,不检查正则表达式;

匹配优先级:精确匹配(=)、^~、~和~*、由不带符号的URL进行左侧匹配;

6、aliias path 用于配置段,定义路径别名

location /imags/ {

root "/web/imgs/";

}

#访问上面的地址就相当于访问

# http://www.hongyang.com/imags/a.jpg --> /vhosts/web/images/a.jpg

location /imags/ {

alias /www/pictures/;

}

# http://www.hongyang.com/imags/a.jpg --> /www/pictures/a.jpg

# 注意:root表示指明路径为对应location的“ /” URL;alias表示路径映射,即location中的URL是相对于alias所指明的路径而言;

7、index 默认页面配置

location / {

index index.html index.htm;

}

# 当index.html 没有影响的时候,就会用index.htm来响应

8、err_page  根据http状态码重定向错误页面

location{

error_page 404 /404.html

}

# 当index.html 没有影响的时候,就会用index.htm来响应

# =[code]: 以指定的响应码进行响应;省略code表示以新资源的响应码为响应码;

location{

error_page 404 = 200 /404.html

}

9、基于IP访问控制

server{

listen 8080;

server_name www.hongyang.com;

location{

root "/vhosts/web1";

# deny all;

allow 192.158.5.128/16;

}

}

# deny禁止哪些IP进行访问:格式 IP/Network

# allow允许哪些IP进行访问 格式 IP/NetWork

10、基于用户的访问控制

server{

listen 8080;

server_name www.hongyang.com;

location / {

root "/vhosts/web1";

auth_basic "Only For VIP"

auth_basic_user_file /app/nginx/users/.htpasswd;

}

}

# 自己生成密钥 需要安装htttpd

# htpasswd -c -m /app/nginx/users/.htpasswd tom

效果

11、SSL配置

<code>#生成私钥->生成CA证书

# cd /etc/pki/CA

# (umask 077; openssl genrsa -out private/cakey.pem 2048)

# openssl req -new -x509 -key private/cakey.pem -out cacert.pem -days 3655

# touch serial index.txt

# echo 01 > serial

#生成Nginx私钥

# (umask 077; openssl genrsa -out nginx.key 1024)

# openssl req -new -key nginx.key -out nginx.csr

#使用CA证书签署

# openssl ca -in nginx.csr -out nginx.crt -days 3655

server {

listen 443 ssl;

server_name wwww.hongyang.com;

ssl_certificate /app/nginx/ssl/nginx.crt;

ssl_certificate_key /app/nginx/ssl/nginx.key;

ssl_session_cache shared:SSL:1m; #会话中缓存放在什么位置,使用多大内存

ssl_session_timeout 5m; #超时时间

ssl_ciphers HIGH:!aNULL:!MD5; #使用那种加密方式

ssl_prefer_server_ciphers on;指定使用 SSLv3 和 TLS 协议时,服务器密码应优先于客户端密码。

location / {

root "/vhosts/web1";

}

}

}

Chrom浏览器导入nginx.crt证书后访问

12、stub_status 状态页

<code> location /status {

stub_status on;

allow 192.168.0.0/16

deny all;

}

}

#仅能用于location 中

Active connections: 2 # 当前所有处于打开状态的连接数

server accepts handled requests

65 65 64

#1、已经连接的连接数

#2、已经处理过的连接数

#3、已经处理过的请求数;在“保持连接”模式下,请求数量可能会多于连接数量

Reading: 0 Writing: 1 Waiting: 1

# Reading 正处于接收请求状态的连接数

# Writing 请求已经接收完成,正处于处理请求活发送响应的过程中的连接数

# Waiting 保持连接模式下,且处于活动状态的连接数

13、rewrite regex replacement flag URL重写标志

<code># rewirte ^/images/(.*\.jgp)$ /imgs/$1 break;

# 相当于访问:http://www.hongyang.com/imges/a/b/c/1.jpg --> http://www.hongyang.com/imgs/a/b/c/1.jpg

# flag

# last:一旦此rewrite规则重写完成后,就不再被后面其他的rewrite规则进行处理,而是由User_Agent重新对重写后的URL再一次发起请求,并从头开始执行类似的过程

# break:一旦此rewrite规则重写完成后,由User_Agent对新的URL重新发起请求,且不在会被当前locationg内的任何rewrite规则所检查

# redirect:以302响应码(临时重定向)返回新的URL

# permanent: 以301响应码(永久重定向)返回新的URL

location / {

root "/vhosts/web1";

rewrite ^/bbs/(.*)$ /forum/$1 break;

rewrite ^/bbs/(.*)$ https://www.hongyang.com/index.html redirect;

}

14、if 上下文

# 语法 if (condition) {}

# 应用环境:server , location

# condition

# 1、变量名:

变量值为空串,或者以“0” 开始,则为false; 其他的均为true

# 2、以变量为操作数构成的比较表达式

可使用=(等于)、!=(不等于)类似的比较操作符进行测试

# 3、正则表达式的模式匹配检查

~:区分大小写的模式匹配检查

~*:不区分大小写的模式匹配检查

!~和!~*:对上面两种的取反

# 4、测试路径为文件可能性:-f和!-f

# 5、测试指定路径为目录的可能性:-d, !-d

# 6、测试文件的存在性:-e, !-e

# 7、检查文件是否有执行权限:x, !-x

if ($http_user_agent ~* MSIE) {

rewrite ^(.*)$ /mise/$1 break;

}

15、防盗链

# refere 模块提供invalid_referer(不合法的)变量,valid_referer(合法的)

location ~* \.(jpg|gif|jpeg|png)$ {

valid_referer none blocked www.hongyang.com

if ($invalid_referer) {

rewirte ^/ http://www.hongyang.com/403.html

}

}

16、定制访问日志格式

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;

# 此处可用变量为nginx各模块内建变量

五、网络相关的配置

1、eepalive_timeout time; #保持连接的超时时长,默认为75s;

2、keepalive_requests; #在一次保持连接上允许承载最大资源请求数;

3、keepalive_disable [msie6|safari|none]; #为指定类型的浏览器禁用长连接;

4、tcp_nodelay on|off; #对长连接是否使用TCP_NODELAY选项;(TCP开销比较大,所以TCP在拥塞算法上对开销较小的请求合并成一次请求,延迟响应)

5、client_header_timeout time; #读取http请求报文首部的超时时长;

6、client_body_timeout time; #读取http请求报文body部分的超时时长;

7、send_timeout time; #发送响应报文的超时时长;



声明

本文内容仅代表作者观点,或转载于其他网站,本站不以此文作为商业用途
如有涉及侵权,请联系本站进行删除
转载本站原创文章,请注明来源及作者。