nginx location 匹配规则

location [=|*|^~] /uri/ { … }

模式 含义
location = /uri = 表示精确匹配,只有完全匹配上才能生效
location ^~ /uri ^~ 开头对URL路径进行前缀匹配,并且在正则之前。
location ~ /uri 开头表示区分大小写的正则匹配
location ~* /uri 开头表示不区分大小写的正则匹配
location /uri 不带任何修饰符,也表示前缀匹配,但是在正则匹配之后
location / 通用匹配,任何未匹配到其它location的请求都会匹配到,相当于switch中的default

nginx 参数

  1. $args 这个变量等于请求行中的参数,同$query_string
  2. $content_length 请求头中的Content-length字段。
  3. $content_type 请求头中的Content-Type字段。
  4. $document_root 当前请求在root指令中指定的值。
  5. $host 请求主机头字段,否则为服务器名称。
  6. $http_user_agent 客户端agent信息
  7. $http_cookie 客户端cookie信息
  8. $limit_rate 这个变量可以限制连接速率。
  9. $request_method 客户端请求的动作,通常为GETPOST
  10. $remote_addr 客户端的IP地址。
  11. $remote_port 客户端的端口。
  12. $remote_user 已经经过Auth Basic Module验证的用户名。
  13. $request_filename 当前请求的文件路径,由rootalias指令与URI请求生成。
  14. $scheme HTTP方法(如httphttps)。
  15. $server_protocol 请求使用的协议,通常是HTTP/1.0HTTP/1.1
  16. $server_addr 服务器地址,在完成一次系统调用后可以确定这个值。
  17. $server_name 服务器名称。
  18. $server_port 请求到达服务器的端口号。
  19. $request_uri 包含请求参数的原始URI,不包含主机名,如:/test/index?arg=baz
  20. $uri 不带请求参数的当前URI$uri不包含主机名,如/test/index
  21. $document_uri $uri相同。

使用Nginx和HTTPS / SSL保护网站

保护机密数据的最简单方法是仅使用HTTPS为您的网站提供服务。
要使用HTTPS加密,必须先使用SSL设置服务器。这要求你:
· 安装SSL的系统包(通常这是被调用的包 openssl)
· 确保Nginx包含SSL支持
· 购买或创建SSL证书并将其放在服务器上的某个位置
· 配置Nginx以使用这些SSL证书

如何保护所有网站流量

下面是一个示例Nginx配置,它通过强制将所有HTTP(端口80)流量重定向到HTTPS(端口443)来保护所有网站流量。
它使用两个server块; 第一个侦听HTTP流量并将其发送到第二个,它处理HTTPS流量。
以下一些假设:

你已经把你的SSL证书文件 yoursite.com.crt ,并 yoursite.com.key 在 /etc/ssl/localcerts/目录
您已经设置了一个正在侦听端口8080的node实例
您正在使用该域名 yoursite.com

user root;
# 启动进程,通常设置成和cpu的数量相等
worker_processes auto;
pid /run/nginx.pid;

events {
    # 工作模式及连接数上限
    worker_connections 1024;
}
# upstream负载均衡,weight是权重,可以根据机器配置定义权重。权重越高被分配到的几率越大。
upstream node {
 server 192.168.1.1:8080 weight=5;
 server 192.168.1.2:8080;
}

http {
    # 指令用来设置日志的记录格式
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';
    # 启动高效传输文件的模式
    sendfile            on;
    # 防止网络阻塞
    tcp_nopush          on;
    # 防止网络阻塞,禁用nagle算法,即不缓存数据
    tcp_nodelay         on;

    keepalive_timeout   65;
    types_hash_max_size 2048;
    # 加载定义mime类型和扩展名之间关联的文件。
    include             /etc/nginx/mime.types;
    default_type        application/octet-stream;

    server {
        # 侦听80端口
        listen       80 default_server;
        # 定义使用 yoursite.com访问
        server_name  yoursite.com;
        # 重写到HTTPS地址。
        # rewrite ^ https//$server_name$request_uri permanent;
        # 更好的配置
        return 301 http://example.com$request_uri;
    }

    server {
        listen       443 ssl http2;
        server_name  yoursite.com;
        ssl on;
        # 证书公钥
        ssl_certificate /etc/ssl/localcerts/yoursite.com.crt; 
        # 证书私钥
        ssl_certificate_key /etc/ssl/localcerts/yoursite.com.key; 
        # 客户端可以重用会话缓存中ssl参数的过期时间
        ssl_session_timeout  10m;
        # 用于启动特定的加密协议
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
        # 加密套件
        ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
        # 设置协商加密算法时,优先使用我们服务端的加密套件,而不是客户端浏览器的加密套件。
        ssl_prefer_server_ciphers on;
        access_log /var/log/nginx/yoursite.com.access.log;
        error_log /var/log/nginx/yoursite.com.error.log;
        # 默认请求
        location / {
             # 反向代理, 对应upstream负载均衡器。也可以proxy_pass http://ip:port。
             proxy_pass https://node;
             # 重新定义或添加字段传递给代理服务器的请求头
             proxy_set_header Host $host;
             proxy_set_header X-Real-IP $remote_addr;
             proxy_set_header XForwardedFor $proxy_add_x_forwarded_for;
        }

        location ~ ^/NginxStatus/ { 
           stub_status on; # Nginx 状态监控配置
           access_log off; 
        } 
  }
}