跳至主要內容

Nginx的初步认识及配置

soulballad架构技术工具NginxNginx约 1007 字大约 3 分钟

1. 什么是Nginx

是一个高性能的反向代理服务器
正向代理代理的是客户端
反向代理代理的是服务端

1.1 Apache&Tomcat&Nginx 区别

Apache、Nginx :静态web服务器;可以通过模块实现动态处理

Tomcat、Jetty:动态web服务器

jsp/servlet服务器 tomcat

Apache、Nginx 都是模块化设计

1.2 安装Nginx

  1. 下载tar包
  2. tar -zxvf nginx-1.17.0.tar.gz
  3. ./configure [--prefix]
    ## 安装路径
    mkdir /opt/program/nginx
    ./configure --prefix=/opt/program/nginx
    
  4. make && make install
    可能需要安装一些依赖组件

1.3启动和停止

  1. sbin/nginx

    cd /opt/program/nginx
    sbin/nginx
    
  2. ./nginx -s stop

2. nginx.conf

2.1 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;

2.2 event

events {
    worker_connections  1024;
}

2.3 http

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  /etc/nginx/logs/access.log main;
    error_log /etc/nginx/logs/error.log warn;
    server_tokens off;
   	# ...

    server {
        listen          80;
        server_name     www.demo.com; #当前服务器ip地址

        location  /web  {
            # ...
        }
   }
}

2.4 server

server {
       listen       80;
       server_name  localhost;

       #charset koi8-r;

       #access_log  logs/host.access.log  main;

       location / {
           root   html;
           index  index.html index.htm;
       }
}

2.4.1 基于ip的虚拟主机

server {
       listen       80;
       server_name  172.18.11.120;

       #charset koi8-r;

       #access_log  logs/host.access.log  main;

       location / {
           root   html;
           index  index.html index.htm;
       }
}

2.4.2 基于端口号的虚拟主机

server {
   ## 监听的端口
   listen        8080; 
   ## 访问的地址
   server_name   localhost;
   location / {
   	## 资源根目录
       root  html;
       ## 主页 index
       index index.html;
   }
}

重新加载配置文件

../sbin/nginx -s reload

2.4.3 基于域名的虚拟主机

www.demo.com ask.demo.com git.demo.com bbs.demo.com

server {
   listen        80;
   server_name   www.demo.com;
   location / {
       root  html;
       index index.html;
   }
}
server {
   listen       80; 
   server_name  bbs.demo.com;
   location / {
      root   html;
      index  bbs.html;
   }
}
server {
   listen       80;
   server_name  ask.demo.com;
   location / {
       root html;
       index  ask.html;
   }
}

3. location

3.1 配置语法

location [= | ~* | ^~ ] /uri/ {...}

3.2 配置规则

location = /uri 精准匹配
location ^~ /uri 前缀匹配
location ~ /uri 正则匹配
location / 通用匹配

3.3 规则的优先级

1 location = / 
2 location = /index
## 前缀匹配 /article/*
3 location ^~ /article/
4 location ^~ /article/files/
## 静态资源
5 location ~ \.(gif|png|js|css)$
6 location /
 
http://192.168.11.154/   
http://192.168.11.154/index ->2
http://192.168.11.154/article/files/1.txt ->4
http://192.168.11.154/mic.png ->5
  1. 精准匹配是优先级最高
  2. 普通匹配(最长的匹配)
  3. 正则匹配

3.4 实际使用建议

location =/ {
    
}
 
location / {
    
}
 
location ~* \.(gif|....)${
    
}

4. Nginx模块

反向代理、email、nginx core。。。

4.1 模块分类

  1. 核心模块 ngx_http_core_module
  2. 标准模块 http模块
  3. 第三方模块

4.2 ngx_http_core_module

server{
    listen port
    server_name

    ​root ...
}

location 实现uri到文件系统路径的映射

error_page

4.3 ngx_http_access_module

实现基于ip的访问控制功能
1、allow address | CIDR | unix: | all;
2、deny address | CIDR | unix: | all;
自上而下检查,一旦匹配,将生效,条件严格的置前

4.4 如何添加第三方模块

  1. 原来所安装的配置,你必在重新安装新模块的时候,加上

  2. 不能直接make install

    configure --prefix=/data/program/nginx
    

安装方法

./configure --prefix=/安装目录 --add-module = /第三方模块的目录

./configure --prefix=/data/program/nginx --with-http_stub_status_module --with- http_random_index_module

cp objs/nginx $nginx_home/sbin/nginx

4.5 http_stub_status_module

location /status {
    stub_status;
}

Active connections:当前状态,活动状态的连接数
accepts:统计总值,已经接受的客户端请求的总数
handled:统计总值,已经处理完成的客户端请求的总数
requests:统计总值,客户端发来的总的请求数
Reading:当前状态,正在读取客户端请求报文首部的连接的连接数
Writing:当前状态,正在向客户端发送响应报文过程中的连接数
Waiting:当前状态,正在等待客户端发出请求的空闲连接数

4.6 http_random_index_module

www.demo.com
随机显示主页
一般情况下,一个站点默认首页都是定义好的index.html、index.shtml等等,如果想站点下有很多页面想随机展示给
用户浏览,那得程序上实现,很麻烦,使用nginx的random index即可简单实现这个功能,凡是以/结尾的请求,都
会随机展示当前目录下的文件作为首页

  1. 添加random_index on 配置,默认是关闭的
    location / {
        root   html;
        random_index on;
        index  index.html index.htm;
    }
    
  2. 在html目录下创建多个html页面
上次编辑于:
贡献者: soulballad