美文网首页程序员
Nginx学习笔记(配置)

Nginx学习笔记(配置)

作者: 佳学说 | 来源:发表于2019-03-16 12:45 被阅读0次

    一、官网

    官网配置 https://docs.nginx.com/nginx/admin-guide/ ,个人建议大家尽量学一手知识,阅读官网文档。虽然google、baidu或者Stack Overflow让大家快速获取知识,但是信息经过他人处理必然会存在信息损失。所以个人比较推崇的流程是先从官网学习,带着不理解的问题去查阅资料这样会事半功倍。

    二、配置

    废话少说,撸配置文件nginx.conf

    user nobody; 
    # 用户组,有权限启动nginx的用户
    # 还可以配置error_log、引用其他文件(include)、工作进程数(work_processes)等
    
    events {
    # 配置时间模型(use)、最大连接数(work_connections)
    }
    
    http {
        # Configuration specific to HTTP and affecting all virtual servers  
    
        server {
            # configuration of HTTP virtual server 1       
            location /one {
                # configuration for processing URIs starting with '/one'
            }
            location /two {
                # configuration for processing URIs starting with '/two'
            }
        } 
        
        server {
            # configuration of HTTP virtual server 2
        }
    }
    
    stream {
        # Configuration specific to TCP/UDP and affecting all virtual servers
        server {
            # configuration of TCP virtual server 1 
        }
    }
    

    事件驱动模型有select、poll、kqueue、epoll等,再下一篇笔记中会介绍。
    最大并发连接数 = work_connections * work_processes
    http块、server块和location块配置项比较多,会通过例子介绍常用配置,如果没介绍到的希望大家去官网翻翻。

    三、实例

    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; #nginx主进程pid存放路径
    
    events {
        use epoll;
        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;
    
        #服务端连接保持时间
        keepalive_timeout  60;
    
        # 下游服务器
        upstream app {
            # 默认权重1
            server 192.168.1.2:80 weight=2;
            server 192.168.1.3:80 weight=2;
            server 192.168.1.4:80;
        }
    
        # 虚拟服务器
        server {
            # 端口
            listen       80;
            # 域名
            server_name  www.myweb.com;
    
            # 处理https://www.myweb.com/one请求
            location /one{
                # 请求根目录
                root   /myweb/one;
                index  index.html index.htm;
            }
    
            # 处理https://www.myweb.com请求
            location / {
                # 请求根目录
                root   /myweb;
                index  index.html index.htm;
            }
    
            # 错误码对应页面
            error_page   500 502 503 504  /50x.html;
            location = /50x.html {
                root   /myweb;
            }
        }
    
        # 反向代理,请求转发至app,并设置header字段
        server {
            listen       8081;
            server_name  app.myweb.com;
    
            location / {
                proxy_pass http://app;
                proxy_set_header Host $host;
                proxy_set_header X-Real-IP $remote_addr;
            }
        }
    }
    
    

    将下游服务器app配置在nginx配置中显得特别笨重,多台nginx配置同步也是一个大问题,所以大公司常规做法是开发自己的域名服务器,通过域名找到机器列表(带权重值),然后进行转发,而非直接配置方式。

    四、其他

    1. server_name如果没注册到DNS是不能被其他人访问的。
    2. 强烈建议撸一遍nginx官网,本人正在看,可以一起交流。(微信453478062)
    3. 简单解释反向代理&正向代理
      - 正向代理:例如wifi热点、网关出口,粗俗讲通过其上网的设备。
      - 反向代理:大网站不希望所有机器暴露给公网,通过反向代理做一次中转。
    4. 反向代理用途:防攻击,https转http、负载均衡、静态缓存等等。

    相关文章

      网友评论

        本文标题:Nginx学习笔记(配置)

        本文链接:https://www.haomeiwen.com/subject/piqdmqtx.html