初识nginx配置文件六大模块
- 一、main(全局设置) 全局作用域
- 1、核心参数介绍
- 2、修改配置
- 二、events(nginx的工作模式)
- 1、核心参数介绍
- 2、修改配置
- 三、http模块
- 1、核心参数介绍
- 四、upstream
- 1、 Nginx的负载均衡模块目前支持4种调度算法:
- 2、常用的状态
- 五、server模块
- 1、核心参数介绍
- 六、location模块
- 1、核心参数
- 七、nginx 中location中root和alias的区别
查看并修改nginx配置文件nginx.conf
cd /usr/local/openresty/nginx/conf
cp nginx.conf nginx.conf.old # 备份原文件
vim nginx.conf #打开nginx的配置文件
nginx的配置文件分为以下六大模块:
一、main(全局设置) 全局作用域
#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;
1、核心参数介绍
user:来指定Nginx Worker 进程运行用户以及用户组,默认由nobody账号运行,也可以创建nginx用户并指定用户,比如可以创建www用户并指定www用户
创建www用户
/usr/sbin/groupadd www
/usr/sbin/useradd -g www www
指定www用户运行nginx,在以上配置中将nobody修改为www
user www;
worker_processes 2;
woker_processes:用来指定nginx要开启的子进程数,每个nginx进程平均耗费10M—12M的内存,根据经验,一般指定1个进程就够了,如果是多核cpu,建议制定和cpu数量一样的进程数。这里指定2,就会开启2个两个子进程,1个主进程,总共三个进程。
error_log:用来配置全局的错误日志文件,日志输出级别有debug、info、notice、warn、error、crit可供选择,其中debug输出日志内容最详细。
pid:用来指定进程id的存储文件位置
worker_rlimit_nofile:用于指定一个nginx进程可以打开最多文件描述符的数目
ulimit -n 65535
2、修改配置
# 指定用户为root
user root;
# 指定工作线程数
worker_processes 4;
# 日志记录 默认会记录日志 一般仅记录异常等级日志
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
# 进程id
#pid logs/nginx.pid;
以上的配置修改后,保存并重启nginx
:wq
nginx -s reload # 重启
ps -aux | grep nginx #重启后查看nginx进程
可以看到有一个主进程,4个子进程(和配置的子进程数一致)
主进程是控制管理子进程,子进程执行处理,父进程不参与,父进程只监听端口和连接服务的分配
二、events(nginx的工作模式)
events {
worker_connections 1024;
}
1、核心参数介绍
use:用来指定nginx的工作模式,nginx支持的工作模式有:select、poll、kqueue、epoll 、rtsig和/dev/poll。其中select和poll都是标准的工作模式,kqueue、epoll是高效的工作模式,kqueue用在BSD系统中,epoll模型是linux系统中的首选。
worker_connections:用于定义Nginx每个进程的最大连接数,即接收前端的最大请求数,默认是 1024。最大客户端连接数由worker_processes和worker_connections决定,即 Max_clients=worker_processes*worker_connections,在作为反向代理时,Max_clients变为:Max_clients = worker_processes * worker_connections/4。进程的最大连接数受Linux系统进程的最大打开文件数限制,在执行操作系统命令“ulimit -n 65536”后worker_connections的设置才能生效。
2、修改配置
events {
use epoll;
worker_connections 1024;
}
三、http模块
http模块负责HTTP服务器相关属性的配置,有server和upstream两个子模块
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; # 开启TCP 推送
keepalive_timeout 65; # nginx超时时间
#gzip on; # 开启压缩文件
# server模块略去
}
1、核心参数介绍
include :来用设定文件的mime类型,类型在配置文件目录下的mime.type文件定义,来告诉nginx来识 别文件类型。
default_type :设定了默认的类型为二进制流,也就是当文件类型未定义时使用这种方式,例如在没有配 置asp的locate环境时,Nginx是不予解析的,此时,用浏览器访问asp文件就会出现下载了。
log_format:用于设置日志的格式,和记录哪些参数,这里设置为main,刚好用于access_log来纪录这 种类型。
四、upstream
upstream 模块 负载均衡模块,通过一个简单的调度算法来实现客户端IP到后端服务器的负载均衡。
1、 Nginx的负载均衡模块目前支持4种调度算法:
weight 轮询(默认)。每个请求按时间顺序逐一分配到不同的后端服务器,如果后端某台服务器宕 机,故障系统被自动剔除,使用户访问不受影响。
weight指定轮询权值,weight值越大,分配到的访问机率越高,主要用于后端每个服务器性能不 均的情况下。
ip_hash。每个请求按访问IP的hash结果分配,这样来自同一个IP的访客固定访问一个后端服务器, 有效解决了动态网页存在的session共享问题。
fair。比上面两个更加智能的负载均衡算法。此种算法可以依据页面大小和加载时间长短智能地进行负 载均衡,
也就是根据后端服务器的响应时间来分配请求,响应时间短的优先分配。Nginx本身是不支持 fair的,如果需要使用这种调度算法,必须下载Nginx的upstream_fair模块。
url_hash。按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,可以进一步提 高后端缓存服务器的效率。Nginx本身是不支持url_hash的,
如果需要使用这种调度算法,必须安装Nginx 的hash软件包。
upstream server_group {
#根据ip 利用Hash算法决定访问哪台机器
ip_hash;
server 192.168.123.1:80;
server 192.168.123.2:80 down;
# ip 方式 最大失败3个连接 间隔 30S 权重为 5
server 192.168.123.3:8080 max_fails=3 fail_timeout=30s weight=5;
server 192.168.123.4:8080;
}
server {
listen 80;
server_name localhost;
location / {
proxy_pass http://server_group/;
}
}
2、常用的状态
在HTTP Upstream模块中,可以通过server指令指定后端服务器的IP地址和端口,同时还可以设定每个后 端服务器在负载均衡调度中的状态。常用的状态有:
down,表示当前的server暂时不参与负载均衡。
backup,预留的备份机器。当其他所有的非backup机器出现故障或者忙的时候,才会请求backup机 器,因此这台机器的压力最轻。
max_fails,允许请求失败的次数,默认为1。当超过最大次数时,返回proxy_next_upstream 模 块定义的错误。
fail_timeout,在经历了max_fails次失败后,暂停服务的时间。max_fails可以和 fail_timeout一起使用。
注意 当负载调度算法为ip_hash时,后端服务器在负载均衡调度中的状态不能是weight和backup。 #备注: nginx的worker_rlimit_nofile达到上限时,再有客户端链接报502错误. 用了log_format指 令设置了日志格式之后,需要用access_log指令指定日志文件的存放路径。
五、server模块
http模块下的子模块,server用来定一个虚拟主机,标志定义虚拟主机开始。
server {
listen 80; # 监听的端口
server_name localhost; # 虚拟主机名称
#charset koi8-r;
#access_log logs/host.access.log main;
}
1、核心参数介绍
listen:用于指定虚拟主机的服务端口。
server_name:用来指定IP地址或者域名,多个域名之间用空格分开。该指令用于虚拟主机的配置。通常分为以下两种:
- 基于名称的虚拟主机配置
语法格式如下:
server_name name ...;
一、对于name 来说,可以只有一个名称,也可以有多个名称,中间用空格隔开。而每个名字由两 段或者三段组成,每段之间用“.”隔开。
server_name 123.com www.123.com
二、可以使用通配符“*”,但通配符只能用在由三段字符组成的首段或者尾端,或者由两端字符组成的尾端。
server_name *.123.com www.123.*
三、还可以使用正则表达式,用“~”作为正则表达式字符串的开始标记。
server_name ~^www\d+\.123\.com$;
该表达式“~”表示匹配正则表达式,以www开头(“^”表示开头),紧跟着一个0~9之间的数字,在紧 跟“.123.co”,最后跟着“m”($表示结尾)
以上匹配的顺序优先级如下:
1 、准确匹配 server_name
2 、通配符在开始时匹配 server_name 成功
3、通配符在结尾时匹配 server_name 成功
4、正则表达式匹配 server_name 成功
- 基于 IP 地址的虚拟主机配置
语法结构和基于域名匹配一样,而且不需要考虑通配符和正则表达式的问题。
server_name 192.168.1.1
charset:用于设置网页的默认编码格式。
access_log:用来指定此虚拟主机的访问日志存放路径,最后的main用于指定访问日志的输出格式。
location的内容见下文对location模块的介绍。
六、location模块
server模块下的子模块。负载均衡,反向代理,虚拟域名等配置。是来定位的,定位URL,解析URL,它也提供了强大 的正则匹配功能,也支持条件判断匹配。可以通过location指令实现Nginx对动,静态网页进行过滤处理。
可以设置需要跳转的页面
location / { # /表示匹配访问根目录。可以支持正则表达式
root html;
index index.html index.htm; #定义页面显示html,一般和alias配合使用。
}
error_page 404 /404.html;
#将服务器错误页重定向到静态页/50x.html
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
#反向代理配置
location /jyb {
proxy_pass http://qurt/;
proxy_read_timeout 1800s;
proxy_set_header Host $host:$server_port;
proxy_set_header X-real-ip $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
#采用uwsgi方式
location /python/ {
include uwsgi_params;
uwsgi_pass 127.0.0.1:33333;
}
# FastCGI方式
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;
}
#访问nginx本机目录的文件
location / {
root /home/hk/;
index index.html index.htm;
}
location /static/ {
alias /var/static/;
}
# deny access to .htaccess files, if Apache's document root
# concurs with nginx's one
#
location ~ /\.ht {
deny all;
}
1、核心参数
root指令用于指定访问根目录时,虚拟主机的web目录,这个目录可以是相对路径(相对路径是相对于 nginx的安装目录)。也可以是绝对路径。
proxy_pass:该指令用于设置被代理服务器的地址。可以是主机名称、IP地址加端口号的形式。代理转发,如果在proxy_pass后面的url加/,表示绝对根路径;如果没有/,表示相对路 径,把匹配的路径部分也给代理走。
语法结构如下:
proxy_pass URL;
URL 为被代理服务器的地址,可以包含传输协议、主机名称或IP地址加端口号,URI等。
proxy_pass http://www.123.com/uri;
proxy_set_header:允许重新定义或者添加发往后端服务器的请求头。
include:加载配置文件,后面介绍nginx多个配置文件时候会提到。
root:定位localtion匹配的url资源路径。
index :全局定义访问的默认首页地址。
语法为:
index filename ...;
后面的文件名称可以有多个,中间用空格隔开。
index index.html index.jsp;
通常该指令有两个作用:第一个是用户在请求访问网站时,请求地址可以不写首页名称;第二个是
可以对一个请求,根据请求内容而设置不同的首页。
七、nginx 中location中root和alias的区别
nginx指定文件路径有两种方式root和alias,这两者的用法区别,使用方法总结了。
root与alias主要区别在于nginx如何解释location后面的uri,这会使两者分别以不同的方式将请求映射到服务器文件上。
[root]
语法:root path
默认值:root html
配置段:http、server、location、if
[alias]
语法:alias path
配置段:location
root实例:
location ^~ /t/ {
root /www/root/html/;
}
如果一个请求的URI是/t/a.html时,web服务器将会返回服务器上的/www/root/html/t/a.html的文件。
alias实例:
location ^~ /t/ {
alias /www/root/html/new_t/;
}
如果一个请求的URI是/t/a.html时,web服务器将会返回服务器上的/www/root/html/new_t/a.html的文件。注意这里是new_t,
因为alias会把location后面配置的路径丢弃掉,把当前匹配到的目录指向到指定的目录。
注意:
1. 使用alias时,目录名后面一定要加"/"。
2. alias在使用正则匹配时,必须捕捉要匹配的内容并在指定的内容处使用。
3. alias只能位于location块中。(root可以不放在location中)
八、总结
通过以上对配置文件中各模块的介绍和了解,对配置文件做了一些修改,保存修改。可以通过浏览器输入服务器ip访问nginx服务(默认80端口)查看一下效果。
查看nginx支持访问的文件类型
vim /usr/local/openresty/nginx/conf/mime.types
可以删除或添加nginx支持的文件格式
查看nginx启动日志
vim /usr/local/openresty/nginx/logs/error.log
查看访问日志
vim /usr/local/openresty/nginx/logs/access.log