程序员

Nginx学习笔记(配置)

2019-03-16  本文已影响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、负载均衡、静态缓存等等。
上一篇下一篇

猜你喜欢

热点阅读