02.Nginx基本配置1

一. 基本模块

  1. 全局块: 配置影响nginx全局的指令。一般有运行nginx服务器的用户组,nginx进程pid存放路径,日志存放路径,配置文件引入,允许生成worker process数等。
  2. events块: 配置影响nginx服务器或与用户的网络连接。有每个进程的最大连接数,选取哪种事件驱动模型处理连接请求,是否允许同时接受多个网路连接,开启多个网络连接序列化等。
  3. http块: 可以嵌套多个server,配置代理,缓存,日志定义等绝大多数功能和第三方模块的配置。如文件引入,mime-type定义,日志自定义,是否使用sendfile传输文件,连接超时时间,单连接请求数等。
  4. server块: 配置虚拟主机的相关参数,一个http中可以有多个server。
  5. location块: 配置请求的路由,以及各种页面的处理情况。
#全局块
worker_processes    1;
error_log log/error.log debug;

#events块
events {
    worker_connections  1024;
}

#http块
http {
    include             mime.types;
    default_type        application/octet-stream;
    sendfile            on;
    keepalive_timeout   65;

    #server块
    server {
        listen             8080;
        server_name        localhost;

        #location块
        location / {
            root              /data/www/demo;
            index             index.html;
        }
        error_page         404 /error.html;
    }
}

二. 服务配置

1. 配置监听

监听IP地址

listen address[:port] [default_server] [setfib=number] [backlog=number] [rcvbuf=size] [sndbuf=size] [deferred] [accept_filter=filter] [bind] [ssl];

配置端口

listen port[default_server] [setfib=number] [backlog=number] [rcvbuf=size] [sndbuf=size] [accept_filter=filter] [deferred] [bind] [ipv6only=on|off] [ssl];

UNIX Domain Socket

listen unix:path [default_server] [backlog=number] [rcvbuf=size] [sndbuf=size] [accept_filter=filter] [deferred] [bind] [ssl];

参数说明:

  1. address: IP地址,如果是 IPV6地址,需要使用中括号[] 括起来,比如[fe80::1]等。
  2. port: 端口号,如果只定义了IP地址,没有定义端口号,那么就使用80端口。
  3. path: socket文件路径,如 var/run/nginx.sock等。
  4. default_server: 标识符,将此虚拟主机设置为 address:port 的默认主机。(在 nginx-0.8.21 之前使用的是 default 指令)
  5. setfib=number: Nginx-0.8.44 中使用这个变量监听 socket 关联路由表,目前只对 FreeBSD 起作用,不常用。
  6. backlog=number: 设置监听函数listen()最多允许多少网络连接同时处于挂起状态,在 FreeBSD 中默认为 -1,其他平台默认为511.
  7. rcvbuf=size: 设置监听socket接收缓存区大小。
  8. sndbuf=size: 设置监听socket发送缓存区大小。
  9. deferred: 标识符,将accept()设置为Deferred模式。
  10. accept_filter=filter: 设置监听端口对所有请求进行过滤,被过滤的内容不能被接收和处理,本指令只在 FreeBSD 和 NetBSD 5.0+ 平台下有效。filter 可以设置为 dataready 或 httpready 。
  11. bind: 标识符,使用独立的bind() 处理此address:port,一般情况下,对于端口相同而IP地址不同的多个连接,Nginx 服务器将只使用一个监听指令,并使用 bind() 处理端口相同的所有连接。
  12. ssl: 标识符,设置会话连接使用 SSL模式进行,此标识符和Nginx服务器提供的 HTTPS 服务有关。

监听示例:

listen *:80 | *:8080;     #监听所有80端口和8080端口
listen IP_address:port;   #监听指定的地址和端口号
listen IP_address;        #监听指定ip地址所有端口
listen port;              #监听该端口的所有IP连接

2. 配置主机名

  • 主机名可使用IP地址多个域名通配符正则表达式方式配置。
server_name           192.168.1.100;        #IP地址
server_name           aaa.com bbb.com;      #多个主机名
server_name           w*.abc.com;           #通配符
server_name           ~^www\d+\.123\.com$;  #正则表达式

3. 配置Location

1. 匹配规则

  • =:精确匹配
  • ^~:uri以某个常规字符串开头,即匹配url路径即可
  • ~:区分大小写的正则匹配
  • ~*:不区分大小写的正则匹配
  • !~:区分大小写不匹配的正则
  • !~*:不区分大小写不匹配的正则
  • /:通用匹配,任何请求都会匹配到

2. 匹配顺序

  • 首先匹配 =;其次匹配 ^~, 其次顺序匹配,最后是/通用匹配。当有匹配成功时,停止匹配,按当前匹配规则处理请求。

匹配规则示例:

location = / {
    #规则A
}
location = /login {
    #规则B
}
location ^~ /static/ {
    #规则C
}
location ~ \.(gif|jpg|png|js|css)$ {
    #规则D
}
location ~* \.png$ {
    #规则E
}
location !~ \.xhtml$ {
    #规则F
}
location !~* \.xhtml$ {
    #规则G
}
location / {
    #规则H
}

匹配结果:

  • http://localhost/ 将匹配规则A(访问根目录)
  • http://localhost/login 将匹配规则B
  • http://localhost/register 则匹配规则H
  • http://localhost/static/a.html 将匹配规则C
  • http://localhost/a.gif 将匹配D(顺序优先)
  • http://localhost/static/c.png 将匹配到规则C
  • http://localhost/a.PNG 将匹配规则E(不区分大小写)
  • http://localhost/category/id/1111 将匹配到规则H

3. 三个匹配规则

  • 第一个必选规则:直接匹配网站根 ,通过域名访问网站首页比较频繁,使用这个会加速处理
#直接转发给后端应用或一个静态首页
location = / {
    proxy_pass http://localhost:8080/index
}
  • 第二个必选规则:静态文件请求,这是nginx作为http服务器的强项
# 有两种配置模式,目录匹配或后缀匹配,任选其一或搭配使用
location ^~ /static/ {
    root /webroot/static/;
}
location ~* \.(gif|jpg|jpeg|png|css|js|ico)$ {
    root /webroot/res/;
}
  • 第三个必须规则:通用规则,用来转发动态请求到后端应用服务器
location / {
    proxy_pass http://localhost:8080/
}

#三. SSL配置
**1.安装证书:**确定机器安装了OpenSSL,然后执行以下命令:

$ sudo openssl req \
  -x509 \
  -nodes \
  -days 365 \
  -newkey rsa:2048 \
  -keyout example.key \
  -out example.crt

......要求填入问题......
Country Name (2 letter code) []:cn          #中国
State or Province Name (full name) []:bj    #北京
Locality Name (eg, city) []:cy              #朝阳
Organization Name (eg, company) []:amo      #组织
Organizational Unit Name (eg, section) []:golang        #组织单元
Common Name (eg, fully qualified host name) []:kepler.cn  #域名      
Email Address []:kepler@qq.com    #邮箱

# 参数说明:
# req:处理证书签署请求
# -x509:生成自签名证书
# -nodes:跳过为证书设置密码的阶段,这样Nginx才可以直接打开证书
# -days 365:证书有效期为一年
# -newkey rsa:2048:生成一个新的私钥,采用的算法是2048位的 RSA
# -keyout:新生成的私钥文件为当前目录下的example.key
# -out:新生成的证书文件为当前目录下的example.crt
# 将生成的证书移动到“~/nginx/conf/certs”目录下
$ mkdir ~/nginx/conf/certs && mv example.crt example.key ~/nginx/conf/certs

2.配置SSL:vim conf/conf.d/default.conf,文件末尾追加以下配置:

server {
    listen 443 ssl http2;
    server_name localhost;

    ssl on;
    ssl_certificate /etc/nginx/certs/example.crt;
    ssl_certificate_key /etc/nginx/certs/example.key;

    ssl_session_timeout 5m;

    ssl_ciphers HIGH:!aNULL:!MD5;
    ssl_protocols SSLv3 TLSv1 TLSv1.1 TLSv1.2;
    ssl_prefer_server_ciphers on;

    location / {
        root /usr/share/nginx/html;
        index index.html index.htm;
    }
}

3.重启Nginx

$ nginx -s reload

# 或重启容器
$ docker run -d --name nginx-test-web\
 -p 8082:80\
 -p 8443:443\
 -v ~/nginx/www:/usr/share/nginx/html\
 -v ~/nginx/conf/.:/etc/nginx/.\
 -v ~/nginx/logs:/var/log/nginx\
 nginx

4.测试Https:https://0.0.0.0:8443/http://0.0.0.0:8002/


附1: 配置说明

# ================================== 全局 ==================================
user nobody nobody;            # 运行用户或者组
worker_processes 1;            # 进程数(一般与逻辑CPU数相等)
pid /nginx/pid/nginx.pid;      # 进程文件
error_log log/error.log debug; # 日志路径与级别(debug|info|notice|warn|error|crit|alert|emerg),可设置全局块,http块,server块。


# ================================== 事件 ==================================
events {
    worker_connections 1024;  # 最大连接数,默认512
    accept_mutex on;          # 设置网路连接序列化,防止惊群现象发生,默认on
    multi_accept on;          # 设置一个进程是否同时接受多个网络连接,默认off
    #use epoll;               # 事件驱动模型(select|poll|kqueue|epoll|resig|/dev/poll|eventport)
}

# ================================== 服务 ==================================
http {
    include /etc/nginx/mime.types;          # 文件类型映射表
    include /etc/nginx/conf.d/*.conf;

    default_type application/octet-stream;   # 默认文件类型,默认为text/plain
    keepalive_timeout 60;                    # 连接超时(默认为75s),可设置http,server,location块

    # 访问日志
    log_format myFormat '$remote_addr$remote_user [$time_local] $request $status $body_bytes_sent $http_referer $http_user_agent $http_x_forwarded_for';
    access_log /var/log/nginx/access.log myFormat;

    sendfile on;                    # 允许sendfile,可设置http,server,location块
    sendfile_max_chunk 100k;        # sendfile最大值,默认为0,无上限


    # 连接超时时间
    #keepalive_timeout 0;
    keepalive_timeout 65;
    tcp_nodelay    on;

    # 数据压缩
    gzip on;
    gzip_disable "MSIE [1-6]\.(?!.*SV1)";

    # 请求缓冲
    client_header_buffer_size  1k;
    large_client_header_buffers 4 4k;

    upstream myservices {
        server 192.168.1.11:8080 weight=1;
        server 192.168.1.12:8080 weight=1 ; #热备
    }

    server {
        keepalive_requests 200;      # 连接上限
        listen  4545;                # 监听端口
        server_name 127.0.0.1;       # 监听地址

        # ~为区分大小写,~*为不区分大小写。
        location ~*^.+$ {
            root           path;            # 根目录
            index index.html index.php;     # 设置默认页
            proxy_pass http://myservices;   # 服务列表
            deny 127.0.0.1;                 # 拒绝的ip
            allow 172.18.5.54;              # 允许的ip
        }

        # 静态文件
        location ~ ^/(images|javascript|js|css|flash|media|static)/ {
            root /var/www/virtual/htdocs;
            expires 7d;   # 7天过期
        }

        # 转发到FastCGI处理
        location ~ \.php$ {
            root /root;
            fastcgi_pass 127.0.0.1:9000;
            fastcgi_index index.php;
            fastcgi_param SCRIPT_FILENAME /home/www/www$fastcgi_script_name;
            include fastcgi_params;
        }

        # 查看Nginx状态
        location /NginxStatus {
            stub_status      on;
            access_log       on;
            auth_basic       "NginxStatus";
            auth_basic_user_file conf/htpasswd;
        }

        # 错误页面
        error_page  500 502 503 504 /50x.html;
        location = /50x.html {
            root  /root;
        }
    }

    error_page 404 https://www.xxx.com;
}

附2: Http状态码

状态码 状态值 说明
200 OK 请求正常
202 Accepted 已接受请求
204 No Content 请求正常,但无返回主体
301 Moved Permanently 永久重定向
302 Found 临时重定向
303 See Other 明确跳转
304 Not Modified 条件不满足
307 Temporary Redirect 临时重定向,POST不会变成GET
400 Bad Request 语法或参数错误
401 Unauthorized 认证失败
403 Forbidden 无访问权限
404 Not Found 无法找到请求资源
408 Request Time-out 请求超时
410 Gone 已被删除
413 Request Entity Too Large 请求的实体过大
414 Request-URI Too Large 请求的URI过长
500 Internal Server Error 服务器内部错误
503 Service Unavailable 服务器超负载或停机维护

参考:
https://www.jianshu.com/p/06e95028943e
https://www.w3cschool.cn/nginxsysc/
https://blog.csdn.net/xiajun07061225/category_1461389.html
https://blog.csdn.net/panleiaiying/article/details/85485389

发布了49 篇原创文章 · 获赞 29 · 访问量 4921
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 技术工厂 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览