当前位置:首页 > Nginx > 正文内容

Nginx基本配置模块

5年前 (2019-08-30)Nginx726

Nginx配置文件

Nginx主配置文件/etc/nginx/nginx.conf是一个纯文本类型的文件,整个配置文件是以区块的形式组织的。一般每个区块以一对大括号{}来表示开始与结束。


1.Main位于nginx.conf配置文件的最高层

2.Main层下可以有Event、HTTP层

3.HTTP层下面有允许有多个Server层, 用于对不同的网站做不同的配置

4.Server层也允许有多个Location, 用于对不同的路径进行不同模块的配置

#nginx默认配置语法
worker_processes   #工作进程, 配置和CPU个数保持一致
error_log        #错误日志, 后面接入的是路径
pid            #Nginx服务启动时的pid

#events事件模块
events {                           #事件模块            
    worker_connections  1024;   #每个worker进程支持的最大连接数
    use                   #内核模型,select,poll,epoll
}

#非虚拟主机的配置或公共配置定义在http{}段内, server{}段外
http {
...    
    #必须使用虚拟机配置站点, 每个虚拟机使用一个server{}段
    server {
        listen       80;       #监听端口, 默认80
        server_name  localhost;     #提供服务的域名或主机名
        
        #控制网站访问路径
        location / {
            root   /usr/share/nginx/html;   #存放网站路径
            index  index.html index.htm;    #默认访问首页文件
        }
        #错误页面,统一定义错误页面
        #定义请求错误, 指定错误代码
        
        则
        error_page   500 502 503 504  /50x.html;
        #错误代码重定向到新的Locaiton
        location = /50x.html {
            root   html;
        }
    }
    ...
   
    #第二个虚拟主机配置
    server {
    ...
    }
}


Nginx日志配置


Nginx日志配置规范


#配置语法: 包括: error.log access.log
Syntax: log_format name [escape=default|json] string ...;
Default:    log_format combined "...";
Context:    http


Nginx默认配置

log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                   '$status $body_bytes_sent "$http_referer" '
                  '"$http_user_agent" "$http_x_forwarded_for"';


$remote_addr                       #表示客户端地址

$remote_user                        #http客户端请求nginx认证用户名

$time_local                            #Nginx的时间

$request                                #Request请求行, GET等方法、http协议版本

$status                                  #respoence返回状态码

$body_bytes_sent                 #从服务端响应给客户端body信息大小

$http_referer                        #http上一级页面, 防盗链、用户行为分析

$http_user_agent                 #http头部信息, 客户端访问设备

$http_x_forwarded_for        #http请求携带的http信息


Nginx状态监控

--with-http_stub_status_module记录Nginx客户端基本访问状态信息


Syntax: stub_status;

Default:    —

Context:    server, location


具体配置如下:

 location /mystatus {
    stub_status on;
    access_log off;
}
#Nginx_status概述
Active connections:2    #Nginx当前活跃连接数
server accepts handled requests
16     16     19

server表示Nginx启动到现在共处理了16个连接。

accepts表示Nginx启动到现在共成功创建16次握手。


请求丢失数=(握手数-连接数)可以看出,本次状态显示没有丢失请求。

handled requests,表示总共处理了19次请求。

Reading     Nginx读取到客户端的 Header 信息数。

Writing     Nginx返回给客户端的 Header 信息数。

Waiting    Nginx开启keep-alive长连接情况下, 既没有读也没有写, 建立连接情况



Nginx下载站点(目录索引)

Nginx默认是不允许列出整个目录浏览下载。


Syntax: autoindex on | off;
Default:    
autoindex off;
Context:   http, server, location

autoindex常用参数


autoindex_exact_size off;

默认为on, 显示出文件的确切大小,单位是bytes。

修改为off,显示出文件的大概大小,单位是kB或者MB或者GB。


autoindex_localtime on;

默认为off,显示的文件时间为GMT时间。

修改为on, 显示的文件时间为文件的服务器时间。


charset utf-8,gbk;

默认中文目录乱码,添加上解决乱码。

配置目录浏览功能


开启目录浏览

location / {
    root html;
    autoindex on;
    autoindex_localtime on;
    autoindex_exact_size off;
}


Nginx访问限制


连接频率限制 limit_conn_module


请求频率限制 limit_req_module


http协议的连接与请求

HTTP是建立在TCP, 在完成HTTP请求需要先建立TCP三次握手(称为TCP连接),在连接的基础上在HTTP请求。


HTTP请求建立在一次TCP连接基础上

一次TCP请求至少产生一次HTTP请求


HTTP协议版本连接关系

HTTP1.0TCP不能复用

HTTP1.1顺序性TCP复用

HTTP2.0多路复用TCP复用


Nginx连接限制配置:


#全局定义连接限制

Syntax:  limit_conn_zone key zone=name:size;

Default: —

Context: http


#引用连接限制

Syntax: limit_conn zone number;

Default: —

Context: http, server, location

#具体配置如下:
http {
#http段配置连接限制, 同一时刻只允许一个客户端IP连接
limit_conn_zone $binary_remote_addr zone=conn_zone:10m;
    ...
    server {
    ...  
        location / {
        #同一时刻只允许一个客户端IP连接
            limit_conn conn_zone 1;
        }
#压力测试
yum install -y httpd-tools
ab -n 50 -c 20  http:#127.0.0.1/index.html


Nginx请求限制配置:


#全局定义请求限制

Syntax:  limit_conn_zone key zone=name:size rate=rate;

Default: —

Context: http


#引用请求限制

Syntax: limit_conn zone number [burst=number] [nodelay];

Default: —

Context: http, server, location

#具体配置如下:
http {
#http段配置请求限制, rate限制速率,限制一秒钟最多一个IP请求
limit_req_zone $binary_remote_addr zone=req_zone:10m rate=1r/s;
    ...
    server {
    ...  
        location / {
        #1r/s只接收一个请求,其余请求拒绝处理并返回错误码给客户端
            limit_req zone=req_zone;
        #请求超过1r/s,剩下的将被延迟处理,请求数超过burst定义的数量, 多余的请求返回503
            #limit_req zone=req_zone burst=3 nodelay;
        }
#压力测试
yum install -y httpd-tools
ab -n 50 -c 20  http:#127.0.0.1/index.html


多个请求可以建立在一次的TCP连接之上, 那么我们对请求的精度限制,当然比对一个连接的限制会更加的有效。 因为同一时刻只允许一个连接请求进入。

但是同一时刻多个请求可以通过一个连接进入。

所以请求限制才是比较优的解决方案。


Nginx访问控制

基于IP的访问控制 http_access_module

基于用户登陆认证 http_auth_basic_module


基于IP的访问控制


#允许配置语法

Syntax: allow address | CIDR | unix: | all;

Default:    —

Context:    http, server, location, limit_except


#拒绝配置语法

Syntax: deny address | CIDR | unix: | all;

Default:    —

Context:    http, server, location, limit_except


#配置拒绝某一个IP, 其他全部允许
location ~ ^/1.html {
    root /usr/share/nginx/html;
    index index.html;
    deny 192.168.56.1;
    allow all;
}
#只允许某一个网段访问,其它全部拒绝
location / {
    root   html;
    index  index.php index.html index.htm;
    allow   192.168.56.0/24;
    deny    all;
}


基于用户登陆认证


#配置语法

Syntax: auth_basic string| off;

Default:    auth_basic off;

Context:    http, server, location, limit_except


#用户密码记录配置文件

Syntax: auth_basic_user_file file;

Default:    -

Context:    http, server, location, limit_except



#需要安装依赖组件

[root@xuliangwei ~]# yum install httpd-tools
[root@xuliangwei ~]# htpasswd -c /etc/nginx/auth_conf qmf


可在http,server,location下添加如下信息

auth_basic "Auth access Blog Input your Passwd!";

auth_basic_user_file /etc/nginx/auth_conf;


用户认证局限性

1.用户信息依赖文件方式

2.操作管理机械,效率低下


解决办法

1.Nginx结合LUA实现高效验证

2.Nginx结合LDAP, 利用nginx-auth-ldap模块


Nginx虚拟主机

虚拟主机,在web服务器里是一个独立的网站站点,这个站点对应独立的域名(也可能是IP或端口),具有独立的程序及资源目录,可以独立地对外提供服务供用户访问。


配置基于域名虚拟主机


1.创建web站点目录

[root@LNMP conf]# mkdir /soft/code/{www,bbs}
[root@LNMP conf]# echo "www" > /soft/code/www/index.html
[root@LNMP conf]# echo "bbs" > /soft/code/bbs/index.html


2.配置虚拟主机

[root@LNMP conf]# cat conf.d/{www,bbs}.conf
server {
    listen       80;
    server_name  www.qmf.com;
    root /soft/code/www;
    ...
}
 

server {
    ...
    listen       80;
    server_name  bbs.qmf.com;
    root /soft/code/bbs;
}


配置不同端口访问不同虚拟主机


#仅修改listen监听端口即可, 但不能和系统端口发生冲突
server {
    ...
    listen       8001;
    ...
}
 
server {
    ...
    listen       8002;
    ...
}


配置虚拟主机别名


所谓虚拟主机别名,就是虚拟主机设置除了主域名以外的一个域名,实现用户访问的多个域名对应同一个虚拟主机网站的功能。


以www.qmf.com域名的虚拟主机为例:

为其增加一个别名qmf.com时,出现网站内容和访问www.qmf.com是一样的,具体配置如下:


#默认配置
[root@LNMP ~]# vim /etc/nginx/nginx.conf
server {
    listen       80;
    server_name www.qmf.com;
}

#别名配置
[root@LNMP ~]# vim /etc/nginx/nginx.conf
server {
    listen       80;
    server_name  www.qmf.com qmf.com;
    ...
}
#使用Linux下curl测试结果
[root@LNMP conf]# curl qmf.com
www.qmf.com
[root@LNMP conf]# curl www.qmf.com
www.qmf.com


#访问带www和不带www是一样的, 除了别名实现也可以通过rewrite实现


返回列表

没有更早的文章了...

下一篇:Nginx的编译安装

“Nginx基本配置模块” 的相关文章

Nginx作为缓存WEB服务

Nginx作为缓存WEB服务

通常情况下缓存是用来减少后端压力, 将压力尽可能的往前推, 减少后端压力,提高网站并发延时1.缓存常见类型服务端缓存代理缓存, 获取服务端内容进行缓存客户端浏览器缓存Nginx代理缓存原理2.缓存配置语法proxy_cache配置语法Syntax: proxy_cache zon...

keepalived高可用

1、keepalived    通过vrrp协议实现的高可用.             虚拟路由冗余协议    ...

Nginx实现Rewrite重写(url重写跳转)及各种案例

Nginx实现Rewrite重写(url重写跳转)及各种案例

Rewrite基本概述Rewrite主要实现url地址重写,以及重定向,就是把传入web的请求重定向到其他url的过程。Rewrite使用场景1、地址跳转,用户访问www.drz.com这个URL是,将其定向至一个新的域名mobile.drz.com2、协议跳转,用户通过http协议请求网站时,将其...

Nginx+Lua实战灰度发布与WAF

Nginx+Lua实战灰度发布与WAF

1.Lua脚本基础语法Lua是一个简洁、轻量、可扩展的脚本语言Nginx+Lua优势充分的结合Nginx的并发处理epool优势和Lua的轻量实现简单的功能且高并发的场景统计IP统计用户信息安全WAF1.安装lua[root@Nginx-Lua ~]# yum inst...

Nginx伪静态

其实所谓的伪静态,就是去除地址里的动态参数,比如 ?、= 等,以便更适应搜索引擎优化搜索,当然,也可以美化我们的 url。下面以文章 id 为 5 的文章页为例。原始地址为:xxx = http://blog.******.com/?p=5现在,我们可以将上述链接的伪静态地址定为:xxx = htt...