nginx location 匹配规则
location [=|*|^~] /uri/ { … }
模式 | 含义 |
---|---|
location = /uri | = 表示精确匹配,只有完全匹配上才能生效 |
location ^~ /uri | ^~ 开头对URL路径进行前缀匹配,并且在正则之前。 |
location ~ /uri | 开头表示区分大小写的正则匹配 |
location ~* /uri | 开头表示不区分大小写的正则匹配 |
location /uri | 不带任何修饰符,也表示前缀匹配,但是在正则匹配之后 |
location / | 通用匹配,任何未匹配到其它location的请求都会匹配到,相当于switch中的default |
nginx 参数
$args: 这个变量等于请求行中的参数,同$query_string
$content_length: 请求头中的Content-length字段。
$content_type: 请求头中的Content-Type字段。
$document_root: 当前请求在root指令中指定的值。
$host: 请求主机头字段,否则为服务器名称。
$http_user_agent: 客户端agent信息
$http_cookie: 客户端cookie信息
$limit_rate: 这个变量可以限制连接速率。
$request_method: 客户端请求的动作,通常为GET或POST。
$remote_addr: 客户端的IP地址。
$remote_port: 客户端的端口。
$remote_user: 已经经过Auth Basic Module验证的用户名。
$request_filename: 当前请求的文件路径,由root或alias指令与URI请求生成。
$scheme: HTTP方法(如http,https)。
$server_protocol: 请求使用的协议,通常是HTTP/1.0或HTTP/1.1。
$server_addr: 服务器地址,在完成一次系统调用后可以确定这个值。
$server_name: 服务器名称。
$server_port: 请求到达服务器的端口号。
$request_uri: 包含请求参数的原始URI,不包含主机名,如:/test/index?arg=baz。
$uri: 不带请求参数的当前URI,$uri不包含主机名,如/test/index。
$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;
}
}
}