初识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配置文件夹_Nginx

查看并修改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个子进程(和配置的子进程数一致)

nginx 配置文件预览服务 nginx配置文件夹_html_02


主进程是控制管理子进程,子进程执行处理,父进程不参与,父进程只监听端口和连接服务的分配

二、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 配置文件预览服务 nginx配置文件夹_nginx_03


查看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