nginxNgixLinux

Nginx服务器 | Nginx配置服务实战

2021-03-29  本文已影响0人  朝槿木兮
6vCJ3Q.jpg

When you realize you want to spend the rest of your life with somebody,you want the rest of your life to start as soon as possible.

当你意识到想和某人共度余生时,便会恨不得下半场人生马上开始。——《当哈利遇到莎莉》1989

基本概述
6vPGa6.jpg

或许当提前80端口和443端口的时候,我们就能想起对应的Http访问[基于HTTP协议]和Https访问[基于HTTP协议+SSL证书]。记忆中比较深刻的,就是开发微信小程序时,对应域名配置述求,必须是备案认证通过的Https的服务。因此,在配置之前,我们需要了解Nginx包含着那些模块以及配置规则,工作原理才能更好地使用Nginx以及认识Nginx。
Nginx由内核和模块组成,其中,内核的设计非常微小和简洁,完成的工作也非常简单,仅仅通过查找配置文件将客户端请求映射到一个location block(location是Nginx配置中的一个指令,用于URL匹配),而在这个location中所配置的每个指令将会启动不同的模块去完成相应的工作。
Nginx的模块从结构上分为核心模块、基础模块和第三方模块, HTTP模块、EVENT模块和MAIL模块等属于核心模块,HTTP Access模块、HTTP FastCGI模块、HTTP Proxy模块和HTTP Rewrite模块属于基本模块,而HTTP Upstream Request Hash模块、Notice模块和HTTP Access Key模块属于第三方模块,用户根据自己的需要开发的模块都属于第三方模块。正是有了这么多模块的支撑,Nginx的功能才会如此强大。
Nginx由内核和模块组成,其中,内核的设计非常微小和简洁,完成的工作也非常简单,仅仅通过查找配置文件将客户端请求映射到一个location block(location是Nginx配置中的一个指令,用于URL匹配),而在这个location中所配置的每个指令将会启动不同的模块去完成相应的工作。


6v89RH.png
Nginx结构分析

以nginx-1.19.8版本为例:


6vmOS0.png

Nginx的源码主要分布在src/目录下,而src/目录下主要包含三部分比较重要的模块:


6v8nJg.png
Nginx 事件驱动模型
cCKxtf.png

Nginx提供支持的模型主要有Select库,Eventport库,Poll库,Epoll库,Kqueue库,Devpoll库以及Eventport库等。

Nginx工作原理

Nginx的模块从功能上分为三类,分别是:

在Nginx的模块下,一次常规的HTTP请求和响应的过程:


cCvbkt.png

在工作方式上,Nginx分为单工作进程和多工作进程两种模式:

Nginx的Http模块
cC1TUI.png
cC3mZ9.png

Nginx常用的模块:

location / {
     root   html;
     index  index.html index.htm;
     allow 127.0.0.1;  ##允许127.0.0.1访问
     deny 127.0.0.1;    ##拒绝127.0.0.1访问
}
location / {
     root   html;
     index  index.html index.htm;
     auth_basic  "Admin"; ##认证对话框的提示字符串显示的内容
     auth_basic_user_file /etc/nginx/conf/htpasswd; ##存放认证用的用户名和文件,需要用htpasswd命令生成
}

对于htpasswd的应用需要安装httpd-tools:

yum install httpd-tools

使用命令生成:htpasswd -c /etc/nginx/conf/htpasswd nginx

[root@cotos-pivotal nginx]# htpasswd  -c /etc/nginx/conf/htpasswd nginx
New password: 
Re-type new password: 
Adding password for user nginx
location / {
     root   html;
     index  index.html index.htm;
     auth_basic  "Admin"; ##认证对话框的提示字符串显示的内容
     auth_basic_user_file /etc/nginx/conf/htpasswd; ##存放认证用的用户名和文件,需要用htpasswd命令生成
         stub_status;
}

状态参数解析:

gzip  on;
gzip_comp_level 6;
gzip_min_length 64;
gzip_proxied any;
gzip_types text/xml text/css  application/javascript;   
    server {
        listen       443 ssl;
        server_name  www.ice.com;
        root /var/www/html;
        ssl on; 
        ssl_certificate /usr/local/nginx/ssl/ssl.crt;
        ssl_certificate_key /usr/local/nginx/ssl/ssl.key;
        ssl_session_cache shared:sslcache:20m;
        location / {
            index  index.html index.htm;
        }
    }

rewrite regex replacement [flag]:将用户请求的URI基于regex所描述的模式进行检查,匹配到时将其替换为replacement指定的新的URI;
在同一级配置块中存在多个rewrite规则,那么会自下而下逐个检查;被某条件规则替换完成后,会重新一轮的替换检查,因此,隐含有循环机制;[flag]所表示的标志位用于控制此循环机制;
其中:

valid_referers none block server_names *.pivotal.com ; 
if($invalid_referer) {return 403;  }

完整的 Nginx配置文件:

#Setting Nginx User Group
user  root;
#Setting Nginx Processes
worker_processes  1;
#Setting Nginx Max Nofile
worker_rlimit_nofile 51200;
#Setting Nginx Events
events {
    worker_connections  51200;
}
#Setting Nginx Http
http {
    include       mime.types;
    default_type  application/octet-stream;
    #Setting Nginx FastCGI[避免504 502等]
    fastcgi_connect_timeout 600s;
    fastcgi_send_timeout 600s;
    fastcgi_read_timeout 600s;
    fastcgi_buffer_size 256k;
    fastcgi_buffers 16 256k;
    fastcgi_busy_buffers_size 512k;
    fastcgi_temp_file_write_size 512k;
    send_timeout 60000;
    client_header_buffer_size 64k;
    large_client_header_buffers 4 64k;
    sendfile        on;
    tcp_nopush     on;
    tcp_nodelay    on;
    #keepalive_timeout  0;
    keepalive_timeout  120;
      #文件上传最大限制50M 默认是1m
    client_max_body_size 100m;
    #gzip  on;
    #Setting  Nginx Gzip
    gzip on;
    gzip_min_length 1k;
    gzip_buffers 4 16k;
    gzip_http_version 1.0;
    gzip_comp_level 2;
    gzip_types text/plain application/x-javascript text/css application/xml;
    gzip_vary on;
      #Setting Nginx Reverse Proxy [反向代理配置 负载均衡]
      #后台系统web层tomcat端口 monitor-8090
      upstream monitor.com{
    ip_hash;
    server localhost:8090 ;
    }
    #前台接口web层tomcat端口proscenium-8091
    upstream proscenium.com{
    ip_hash;
    server localhost:8091;
    }
    #移动接口web层tomcat端口mobile-8092
    upstream mobile.com{
    ip_hash;
    server localhost:8092;
    }
    #后台系统web层tomcat端口 schedule-8093
    upstream schedule.com{
      ip_hash;
      server localhost:8093;
    }
    server {
         listen       80;
         server_name  localhost;
         #处理websocket请求
         location /monitor {
         #请求转向定义的服务器列表
         proxy_pass  http://monitor.com/zhimeng;
         add_header Access-Control-Allow-Origin *;
         add_header Access-Control-Allow-Headers X-Requested-With;
         add_header Access-Control-Allow-Methods GET,POST,OPTIONS;
         proxy_set_header Host $host;
         proxy_set_header X-Real-IP $remote_addr;
         proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
         # 超时设置 默认300s
         proxy_read_timeout 300s;
         proxy_send_timeout 300s;
        }
        location /proscenium {
        #请求转向定义的服务器列表
        proxy_pass  http://proscenium.com;
        add_header Access-Control-Allow-Origin *;
        add_header Access-Control-Allow-Headers X-Requested-With;
        add_header Access-Control-Allow-Methods GET,POST,OPTIONS;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        # 超时设置 默认300s
        proxy_read_timeout 300s;
        proxy_send_timeout 300s;
       }
        location /mobile {
       #请求转向定义的服务器列表
       proxy_pass  http://mobile.com;
       add_header Access-Control-Allow-Origin *;
       add_header Access-Control-Allow-Headers X-Requested-With;
       add_header Access-Control-Allow-Methods GET,POST,OPTIONS;
       proxy_set_header Host $host;
       proxy_set_header X-Real-IP $remote_addr;
       proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
       # 超时设置 默认300s
       proxy_read_timeout 300s;
       proxy_send_timeout 300s;
        }
        location /schedule {
       #请求转向定义的服务器列表
       proxy_pass  http://schedule.com/;
       add_header Access-Control-Allow-Origin *;
       add_header Access-Control-Allow-Headers X-Requested-With;
       add_header Access-Control-Allow-Methods GET,POST,OPTIONS;
       proxy_set_header Host $host;
       proxy_set_header X-Real-IP $remote_addr;
       proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
       # 超时设置 默认300s
       proxy_read_timeout 300s;
       proxy_send_timeout 300s;
        }
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
        location /staticFile {
        alias /root/repository/staticFile;
        autoindex on;
        autoindex_exact_size on;
        autoindex_localtime on;
       }
    }
}

版权声明:本文为博主原创文章,遵循相关版权协议,如若转载或者分享请附上原文出处链接和链接来源。

上一篇下一篇

猜你喜欢

热点阅读