博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

Nginx基础 - 03基本配置

Posted on 2023-03-11 12:14  Kingdomer  阅读(31)  评论(0编辑  收藏  举报
 

一、 Nginx配置文件结构

Nginx主配置文件/etc/nginx/nginx.conf是一个纯文本类型的文件。
整个配置文件是以区块的形式组织的。一般,每个区块以一对大括号{}来表示开始于结束。
1. Main层位于nginx.conf配置文件的最高层
2. Main层下可以有Event、HTTP层
3. HTTP层下面允许有多个Server层,用于对不同的网站做不同的配置
4. Server层允许有多个Location,用于对不同的路径进行不同模块的配置
 
[root@my-node10 nginx]# cat nginx.conf

user  nginx;
worker_processes  auto;

error_log  /var/log/nginx/error.log notice;
pid        /var/run/nginx.pid;

events {
    worker_connections  1024;
}

http {
    include       /etc/nginx/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  /var/log/nginx/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    keepalive_timeout  65;

    #gzip  on;

    include /etc/nginx/conf.d/*.conf;
}

  

[root@my-node10 conf.d]# cat default.conf
server {
    listen       80;
    server_name  localhost;

    #access_log  /var/log/nginx/host.access.log  main;

    location / {
        root   /usr/share/nginx/html;
        index  index.html index.htm;
    }

    #error_page  404              /404.html;

    # redirect server error pages to the static page /50x.html
    # 错误页面,统一定义错误页面,
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }
    # 省略其他的配置
}

  

二、 日志配置

[root@my-node10 nginx]# pwd
/application/nginx
[root@my-node10 nginx]# tree
.
├── hotel
│   └── index.html
└── shop
    └── index.html

2 directories, 2 files

[root@my-node10 conf.d]# cat shop.conf  hotel.conf
server {
    listen 80;
    server_name www.myshop.com;
    root /application/nginx/shop;
    index index.html;
}

server {
    listen 80;
    server_name www.myhotel.com;
    root /application/nginx/hotel;
    index index.html;
}

  

[root@my-node10 conf.d]# nginx -t -c /etc/nginx/nginx.conf
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

[root@my-node10 conf.d]# nginx -s reload

  

访问www.myshop.com 和 www.myhotel.com
     

 

192.168.6.102 - - [05/Mar/2023:15:08:59 +0800] "GET / HTTP/1.1" 200 61 "-" 
                                               "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36" "-"
192.168.6.102 - - [05/Mar/2023:15:08:59 +0800] "GET /favicon.ico HTTP/1.1" 404 555 "http://www.myshop.com/" 
                                               "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36" "-"
 

日志添加 请求和响应时间

log_format  main  '$remote_addr - $remote_user [$time_local] "$request" $status $body_bytes_sent "$http_referer" "$http_user_agent" "$http_x_forwarded_for" "$request_time" "$upstream_response_time"';
10.1.2.3 - - [20/Mar/2017:04:05:49 +0800] "GET /myApp/servlet/TestServlet HTTP/1.1" 200 52 "-" "Mozilla/4.0 (compatible; MSIE 4.0; Windows NT)" "-" 0.015 0.015 

 

request_time
# 从接受用户请求的第一个字节到发送完响应数据的时间,即包括接收请求数据时间、程序响应时间、输出响应数据时间。
request processing time in seconds with a milliseconds resolution; 
   time elapsed between the first bytes were read from the client and the log write after the last bytes were sent to the client 。

upstream_response_time
# 从Nginx向后端服务器 发起建立连接 到 接受完数据 然后关闭连接为止的时间。
keeps times of responses obtained from upstream servers; 
    times are kept in seconds with a milliseconds resolution. Several response times are separated by commas and colons like addresses in the $upstream_addr variable。

$request_time肯定比$upstream_response_time值大,特别是使用POST方式传递参数时,因为Nginx会把request body缓存住,接收完毕后才会把数据一起发给后端。
所以如果用户网络较差,或者传递数据较大时,$request_time会比$upstream_response_time大很多。 

  

三、Nginx状态监控

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

具体配置:
    location /mystatus {
        stub_status on;
        access_log off;
    }

  

 

  • Active connections: The current number of active client connections including Waiting connections. Nginx当前活跃的连接数
  • accepts: The total number of accepted client connections. 
  • handled: The total number of handled connections. requests: The total number of client requests.
    • Generally, the parameter value is the same as accepts unless some resource limits have been reached (for example, the worker_connections limit).
  • Reading: The current number of connections where nginx is reading the request header.
  • Writing: The current number of connections where nginx is writing the response back to the client.
  • Waiting: The current number of idle client connections waiting for a request.

四、 虚拟主机

虚拟主机,在Web服务器里是一个独立的网站站点, 
站点对应独立的域名(也可以是IP或端口), 具有独立的程序及资源目录,独立对外提供服务。
 
4.1 基于域名的虚拟主机
[root@my-node10 conf.d]# cat hotel.conf
server {
    listen 80;
    server_name www.myhotel.com;
    root /application/nginx/hotel;
    index index.html;
}

[root@my-node10 conf.d]# cat shop.conf
server {
    listen 80;
    server_name www.myshop.com;
    location / {
        root /application/nginx/shop;
        index index.html;
    }
}

  

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

server {
    listen 8001;
    ......
}

server {
    listen 8002;
    ......
}

  

4.3 配置不同IP访问不同虚拟主机

server {
    listen 80;
    server_name 192.168.6.10;
    ......
}

  

4.4 虚拟主机别名

server {
    listen 80;
    server_name www.myhotel.com myhotel.com myhoteldev.com;
    root /application/nginx/hotel;
    index index.html;
}

 

4.5 文件名的排序

相同的域名, 相同的端口, 谁的文件名在前,谁会被优先读取到。

[root@my-node10 demo]# mkdir  d1 d2 d3
[root@my-node10 demo]# echo "d1-1" > d1/index.html
[root@my-node10 demo]# echo "d2-1" > d2/index.html
[root@my-node10 demo]# echo "d3-1" > d3/index.html
[root@my-node10 demo]# echo "demo" > 1.html
[root@my-node10 demo]# ls
d1  d2  d3  index.html

  

[root@my-node10 conf.d]# cat demo1.conf
server {
    listen 80;
    server_name demo.com;
    root /application/nginx/demo/d1;
    index index.html index.htm;
    location ~ ^/1.html {
        root /application/nginx/demo;
    }
}
[root@my-node10 conf.d]# cat demo2.conf
server {
    listen 80;
    server_name demo.com;
    root /application/nginx/demo/d2;
    index index.html index.htm;
    location ~ ^/1.html {
        root /application/nginx/demo;
    }
}

 

 

[root@my-node10 conf.d]# ll
总用量 28
-rw-r--r-- 1 root root 1152 3月 5 16:21 default.conf
-rw-r--r-- 1 root root 227 3月 5 20:03 demo1.conf
-rw-r--r-- 1 root root 227 3月 5 20:04 demo2.conf

# 访问demo.com, 使用的是 demo1.conf 配置文件
[root@my-node51 ~]# curl http://demo.com
d1-1

 

  

[root@my-node10 conf.d]# mv demo1.conf demo4.conf
[root@my-node10 conf.d]# ll
总用量 28
-rw-r--r-- 1 root root 1152 3月   5 16:21 default.conf
-rw-r--r-- 1 root root  227 3月   5 20:04 demo2.conf
-rw-r--r-- 1 root root  227 3月   5 20:03 demo4.conf

[root@my-node10 conf.d]# nginx -s reload
nginx: [warn] conflicting server name "demo.com" on 0.0.0.0:80, ignored

[root@my-node51 ~]# curl http://demo.com
d2-1
[root@my-node51 ~]# curl http://demo.com/1.html
demo

  

[root@my-node10 conf.d]# cat demo3.conf
server {
    listen 80;
    server_name demo.com default;
    root /application/nginx/demo/d3;
    index index.html index.htm;
    location ~ ^/1.html {
        root /application/nginx/demo;
    }
}

  

[root@my-node51 ~]# curl http://demo.com
d2-1

[root@my-node51 ~]# curl http://demo.com/1.html
demo