Nginx常用配置规则

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

nginx server命中规则

// 监听 所有ip的80端口匹配所有的Host
server {
    listen      80;
    ...
}
// 监听 所有ip的80端口匹配Host为 example.net或www.example.net的请求
server {
    listen      80;
    server_name example.net www.example.net;
    ...
}
// 监听 192.168.1.1的80端口,匹配所有的Host
server {
    listen      192.168.1.1:80;
    server_name example.com www.example.com;
    ...
}
// 监听所有ip的80端口匹配Host,当请求80端口的请求没有命中别的server时作为默认server接受请求。
server {
    listen      80 default_server;
    server_name example.net www.example.net;
    ...
}

指定端口默认监听所有ip默认匹配所有Host,再没有命中Host的情况下由 default_server接收请求没有指定default_server的由第一个命中的server接收请求。

Location命中规则

server {
    listen      80;
    server_name example.org www.example.org;
    root        /data/www;

    location / {
        index   index.html index.php;
    }

    location ~* \.(gif|jpg|png)$ {
        expires 30d;
    }

    location ~ \.php$ {
        fastcgi_pass  localhost:9000;
        fastcgi_param SCRIPT_FILENAME
                      $document_root$fastcgi_script_name;
        include       fastcgi_params;
    }
}
  1. 命中只管请求路径部分不管参数url参数部分。
  2. 首先根据location的规则依次去匹配“/”将放到最后匹配如果有location命中则停止匹配否则命中“/”

server_name

可以由精确的字符串、通配符、正则表达式进行指定。如果一个请求被多个server_name匹配优先级为

  1. 精确匹配
  2. *开头的最长通配符 eg *.baidu.com
  3. *结尾的最长通配符 eg: www.baidu.*
  4. 第一个命中的正则表达式

通配符命名限制

通配符形式只能在名称的前面或者后面且只能出现在一个点边的边界上比如www.*.baidu.com和*baidu.*是无效的但是这两个名称可以用正则表达式表示。
“.baidu.com"可以匹配"baidu.com"和”*.baidu.com"

无效的server_name命名

“_”、“–”、"!@#"等都是无效的命名并没有实际的作用。

配置HTTPS服务

要配置HTTPS服务器必须在服务器块中的侦听套接字上启用ssl参数并且应该指定服务器证书和私钥文件的位置:

server {
    listen              443 ssl;
    server_name         www.example.com;
    ssl_certificate     www.example.com.crt;   # 公钥将被发送到所有连接的客户端
    ssl_certificate_key www.example.com.key; # 秘钥需要保留在一个访问受限但是nginx主线程可访问的文件夹中。
    # ssl_protocols和ssl_ciphers用于限定连接只包含SSL/TLS的强版本和密码。这是nginx的默认配置所以可以不用显示配置
    # ssl_protocols       TLSv1 TLSv1.1 TLSv1.2;
    # ssl_ciphers         HIGH:!aNULL:!MD5;
    ...
}

Https服务优化

worker_processes auto;

http {
    ssl_session_cache   shared:SSL:10m;
    ssl_session_timeout 10m;

    server {
        listen              443 ssl;
        server_name         www.example.com;
        keepalive_timeout   70;

        ssl_certificate     www.example.com.crt;
        ssl_certificate_key www.example.com.key;
        ssl_protocols       TLSv1 TLSv1.1 TLSv1.2;
        ssl_ciphers         HIGH:!aNULL:!MD5;
        ...

负载均衡

nginx中的反向代理实现包括HTTP、HTTPS、FastCGI、uwsgi、SCGI、memcached和gRPC的负载均衡。负载均衡有健康检测功能当nginx检测到集群的服务响应失败或返回错误时nginx会在一段时间内尽量少的将请求分发给该服务。

负载均衡的方法

  1. 轮询默认方法循环分发请求。
  2. 最少连接下一个请求将交给持有最少活动连接的工作线程。
  3. ip-hash通对客户端的ip进行hash分发请求。

注意轮询和最少连接进行负载均衡不能保证客户端的请求每次都发送到同一个服务器上。

负载均衡配置

http {
    upstream myapp1 {
        least_conn;
    #	ip_hash; 
	# 	round-robin  (默认方法)
        server srv1.example.com  weight=3;  # 通过加权重的方式可以调整服务的转发
        server srv2.example.com;
        server srv3.example.com;
    }

    server {
        listen 80;

        location / {
            proxy_pass http://myapp1;
        }
    }
}

代理websocket服务

http {
	## 根据请求头的Upgrade设置Connection
	## 匹配请求头中有没有Upgrade字段有则设置$connection_upgrade=upgrade否则$connection_upgrade=close
    map $http_upgrade $connection_upgrade {
        default upgrade;
        ''      close;
    }

    server {
        ...

        location /chat/ {
            proxy_pass http://backend;
            proxy_http_version 1.1;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection $connection_upgrade;
        }
    }

默认设置下代理服务器60秒内没有传输数据将会断开链接这个时间可以通过proxy_read_timeout指令设置。
所以一般情况下代理服务器通过定时发送心跳数据来保持链接。

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6
标签: nginx