• nginx


    修改配置后要重启,先检查修改后的配置有没有问题 ./nginx -t

    $ wget https://nginx.org/download/nginx-1.18.0.tar.gz
    $ tar -zxvf nginx-1.15.2.tar.gz
    $ cd nginx-1.15.2
    $ ./configure --with-pcre --prefix=/usr/local/nginx --with-threads  --with-file-aio  --with-http_ssl_module  --with-http_v2_module  --with-http_realip_module  --with-http_addition_module  --with-http_xslt_module=dynamic  --with-http_image_filter_module  --with-http_geoip_module=dynamic  --with-http_sub_module  --with-http_dav_module  --with-http_flv_module  --with-http_mp4_module  --with-http_gunzip_module  --with-http_gzip_static_module  --with-http_auth_request_module  --with-http_random_index_module  --with-http_secure_link_module  --with-http_degradation_module  --with-http_slice_module  --with-http_stub_status_module  --without-http_charset_module  --with-http_perl_module  --with-mail=dynamic  --with-mail_ssl_module  --with-stream=dynamic  --with-stream_ssl_module  --with-stream_realip_module  --with-stream_geoip_module=dynamic  --with-stream_ssl_preread_module
    
    $ make && make install
    $ cd /usr/local/nginx/    安装位置
    
    // 查看nginx.conf文件位置
    $ nginx -t
    
    // 查看nginx进程
    $ ps -ef | grep nginx
    
    // 强制杀掉进程
    $ kill -s 9 <nginx-pid>
    

    windows直接下载安装后启动 nginx.exe 会自动打开80端口,直接访问localhost就能查看是否开启成功

    $ cd /f/myTool/nginx-1.15.1
    $ ./nginx.exe -h
    

    命令选项

    λ ./nginx.exe -h
    nginx version: nginx/1.15.1
    Usage: nginx [-?hvVtTq] [-s signal] [-c filename] [-p prefix] [-g directives]
    
    选项:
       - ?, - h:这个帮助
       -v:显示版本并退出
       -V:显示版本并配置选项然后退出
       -t:测试配置并退出
       -T:测试配置,转储并退出
       -q:在配置测试期间抑制非错误消息
       -s signal:向主进程发送信号:停止[stop],退出[quit],重新打开[reopen],重新加载[reload]
       -p prefix:设置前缀路径(默认值:NONE)
       -c filename:设置配置文件(默认值:conf / nginx.conf)
       -g指令:从配置文件中设置全局指令
    

    日志 /logs

    • 所有的请求信息会被打印到 access.log里面
    • 错误日志打印到error.log
    • nginx.pid 是当前的进程

    nginx.conf

    #user  nobody;       # Nginx 运行的用户和用户组
    worker_processes  1; # 启动进程,通常和cpu一样
    
    #error_log  logs/error.log;
    #error_log  logs/error.log  notice;
    #error_log  logs/error.log  info;
    
    #pid        logs/nginx.pid;
    
    
    events {
        worker_connections  1024;  # 单个后台,工作进程最大并发链接数
    }
    
    
    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; # 是否调用 sendfile 来输出文件,普通应用必须设置on,如果是磁盘io重负应用可设置成off
        #tcp_nopush     on; # 防止网络阻塞
    
        #keepalive_timeout  0;
        keepalive_timeout  65; # 客户端到服务器的超时时间
    
        #gzip  on; #开启gzip压缩
    
        server {
            listen       80;
            server_name  localhost;
    
            #charset koi8-r;
    
            #access_log  logs/host.access.log  main;
    
            location / {
                root   html; # the path of static file
                index  index.html index.htm; # read file by default
            }
    
            #error_page  404              /404.html;
            error_page  404              /404.html;
            location = /404.html {
                root    html;
            }
    
            # redirect server error pages to the static page /50x.html
            error_page   500 502 503 504  /50x.html;
            location = /50x.html {
                root   html;
            }
    
            # proxy the PHP scripts to Apache listening on 127.0.0.1:80
            #
            #location ~ .php$ {
            #    proxy_pass   http://127.0.0.1;
            #}
    
            # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
            #
            #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;
            #}
    
            # deny access to .htaccess files, if Apache's document root
            # concurs with nginx's one
            #
            #location ~ /.ht {
            #    deny  all;
            #}
        }
    
    
        # another virtual host using mix of IP-, name-, and port-based configuration
        #
        #server {
        #    listen       8000;
        #    listen       somename:8080;
        #    server_name  somename  alias  another.alias;
    
        #    location / {
        #        root   html;
        #        index  index.html index.htm;
        #    }
        #}
    
    
        # HTTPS server
        #
        #server {
        #    listen       443 ssl;
        #    server_name  localhost;
    
        #    ssl_certificate      cert.pem;
        #    ssl_certificate_key  cert.key;
    
        #    ssl_session_cache    shared:SSL:1m;
        #    ssl_session_timeout  5m;
    
        #    ssl_ciphers  HIGH:!aNULL:!MD5;
        #    ssl_prefer_server_ciphers  on;
    
        #    location / {
        #        root   html;
        #        index  index.html index.htm;
        #    }
        #}
    
    }
    

    反向代理&负载均衡

    weight 值越大 分配的几率越高

        upstream proxy_hosts {
            server 96.45.179.62:80 weight=5;
            server localhost:8081 weight=1;
        }
    
        server {
            location / {
                # 访问localhost时, 会被转到http://96.45.179.62:80;
                proxy_pass   http://proxy_hosts;
                # proxy_pass   http://96.45.179.62:80;
                # rewrite ^(.*).htmp$ /index.html;
            }
        }
    

    比如node开了一个服务器端口,需要使用二级域名来访问

            server {
                    listen 80;
                    server_name blog.ajanuw.xyz;
                    location / {
                            proxy_pass http://127.0.0.1:5000;
                    }
            }
    

    上面的例子把blog.ajanuw.xyz转发到了http://127.0.0.1:5000

    https转发示例

    当访问 ajanuw.xyz时,会被跳转到https://ajanuw.xyz,然后返回服务器的3000端口程序

            server {
                    listen 80;
                    listen [::]:80;
                    server_name ajanuw.xyz;
                    return 301 https://ajanuw.xyz;
            }
    
            server {
                    listen 443 ssl http2;
                    listen [::]:443 ssl http2;
    
                    ssl_certificate /etc/letsencrypt/live/ajanuw.xyz/cert.pem;
                    ssl_certificate_key /etc/letsencrypt/live/ajanuw.xyz/privkey.pem;
                    ssl_session_timeout 1d;
                    ssl_session_cache shared:MozSSL:10m;
                    ssl_session_tickets off;
    
                    ssl_dhparam /etc/letsencrypt/live/ajanuw.xyz/dhparam.pem;
    
                    ssl_protocols TLSv1.2 TLSv1.3;
                    ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;
                    ssl_prefer_server_ciphers off;
    
                    add_header Strict-Transport-Security "max-age=63072000" always;
    
                    ssl_stapling on;
                    ssl_stapling_verify on;
    
                    ssl_trusted_certificate /etc/letsencrypt/live/ajanuw.xyz/fullchain.pem;
    
                    resolver 96.45.181.208;
    
                    location / {
                            proxy_pass http://127.0.0.1:3000;
                    }
    

    路由中的正则表达式

            location /(*).html {
                root html;
                index $1.html;
            }
    
            location ~ /admin/public/.+.(?:jpg|png)$ {
                root html;
            }
    

    可以用"$N"取出group的值,假如访问"localhost/a.html"那么就会加载"html/a.html"文件。

    正则表达式应以"~"开头,第二个路由假如访问"/admin/public/i.png"到本地的"html/admin/public/i.png"文件,没找到返回404

    ""区分大小写,"*" 不区分大小写

    正则表达式中的命名捕获会创建变量

    server {
        server_name ~^(www.)?(?<domain>.+)$;
    
        location / {
            root /sites/$domain;
        }
    }
    

    静态文件

    nginx将根据请求,从不同的本地目录提供文件

    匹配的请求,会将URI添加到root指令中指定的路径"{root}/{URL}"

            location / {
                root html;
                index index.html; # 在"html"目录下找"index.html"文件
            }
    
            location /xx/yy/zz/ {
                root html;
                index index.html; # 在"html/xx/yy/zz/"目录下找"index.html"文件
            }
    

    alias虚拟路径

            location /admin/ {
                alias html/xxx/;
                index index.html;
            }
    
            location / {
                root html;
                index index.html;
            }
    

    访问"localhost/admin/"将返回"html/xxx/index.html"

    你可能想返回纯文本

            location / {
                charset utf-8;
                default_type text/html;
    
                set $my_name ajanuw;
                set $my_password 123456;
                
                if ($args) {
                    set $test a;
                }
    
                if ($arg_name = $my_name) {
                    set $test "${test}b";
                }
                if ($arg_password = $my_password) {
                    set $test "${test}c";
                }
    
                add_header X-test "$test"; # test
    
                if ($test = abc) {
                    # test
                    add_header X-arg_name $arg_name;
                    add_header X-arg_password $arg_password;
                    add_header X-args $args;
                    return 200 "<h1>Welcome Login $arg_name</h1>";
                }
    
                return 200 "<h1>hello world</h1>";
            }
    

    include

    可以将不同配置文件分开存放,然后在"nginx.conf"中导入

    conf/servers.con

    server {
      listen 80;
      server_name 127.0.0.1;
    
      location /api/url {
        charset utf-8;
        default_type text/html;
    
        if ($arg_url) {
          set $zf 1;
        }
    
        if ($arg_url ~* ^https?) {
          set $zf "${zf}2";
        }
    
        if ($zf = 12) {
          return 303 $arg_url;
        }
    
        if ($zf = 1) {
          return 303 http://$arg_url;
        }
    
        return 400 "需要url参数";
      }
    }
    

    conf/nginx.conf

    http {
      ...
    
      include servers.conf;
    }
    

    下载速率限制

          location  /img/ {
    	root html;
    	# 每秒10kb
    	limit_rate 10k; 
    	add_header Content-disposition "attachment";
          }
    

    See also:

  • 相关阅读:
    最小的K个数
    数组中出现次数超过一半的数字
    符串的排列
    二叉搜索树与双向链表
    复杂链表的复制
    String,StringBuilder,StringBuffer
    二叉树中和为某一值的路径
    二叉搜索树的后序遍历序列
    Java单例模式
    222. Count Complete Tree Nodes
  • 原文地址:https://www.cnblogs.com/ajanuw/p/9325853.html
Copyright © 2020-2023  润新知