常用配置项
worker_processes 2;
events {
worker_connections 2048;
}
http {
server_tokens off;
include mime.types;
default_type application/octet-stream;
server_names_hash_bucket_size 128;
client_header_buffer_size 4k;
large_client_header_buffers 4 128k;
#size limits
client_max_body_size 8m;
client_body_buffer_size 256k;
client_header_timeout 3m;
client_body_timeout 3m;
send_timeout 3m;
sendfile on;
tcp_nopush on;
keepalive_timeout 600;
tcp_nodelay on;
#sendfile on;
#tcp_nopush on;
#keepalive_timeout 0;
# keepalive_timeout 600;
//压缩相关
gzip on;
gzip_min_length 1k;
gzip_buffers 4 16k;
#gzip_http_version 1.0;
gzip_comp_level 3;
gzip_types text/plain application/x-javascript text/css application/xml text/javascript application/javascript;
gzip_vary off;
gzip_disable "MSIE [1-6]\.";
// 后端可以获取真实IP
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header REMOTE-HOST $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
#client_max_body_size 30m;
upstream name { //多台机器负载均衡
//ip_hash; 选用Iphash方式
server localhost:8913 weight=1;//weight越大,权重越大
}
server {
listen 80;
server_name 123.56.129.97;
charset utf-8;
access_log logs/access.log;
location / {
#过期时间为1天:1d 一小时:1h 一分钟:1m -1:永远过期
location ~* \.(js|css|html) {expires -1;}
root html; //静态页目录
index index.html index.htm; //首页默认格式
}
location /sub-1/ {
proxy_pass http://localhost:8912;
}
location /sub-2/ {
proxy_pass http://name;
}
}
}
location
- 语法:location [= | ~ | ~* | ^~] </uri/> {...}
- 缺省:N/A
- 作用域:server
匹配规则:
1. 四种匹配方式
= 精确匹配
~ 大小写敏感正则匹配
~* 大小写不敏感正则匹配
^~ 前缀匹配
2. location匹配指令的执行顺序
首先:= 精确匹配;
其次:^~ 前缀匹配;
再次:~* 和 ~ 正则匹配,顺序依据出现顺序;
最后:如果出现正则匹配成功,则采用该正则匹配;如果无可匹配正则,
则采用前缀匹配结果。
举例:location = / { # 只匹配"/".}
location / {# 匹配任何请求,因为所有请求都是以"/"开始
# 但是更长字符匹配或者正则表达式匹配会优先匹配
}
location ^~ /images/ {
# 匹配任何以 /images/ 开始的请求,并停止匹配
其它location}
location ~* \.(gif|jpg|jpeg)$ {
# 匹配以 gif, jpg, or jpeg结尾的请求.
# 但是所有 /images/ 目录的请求将由上面localtion处理.
}
多工程配置文件
nginx.conf中添加http模块下添加include属性:
http:{
include /etc/nginx/conf.d/*.conf;
server {
listen 80 default_server;
listen [::]:80 default_server;
server_name _;
root /usr/share/nginx/html;
return 403;
# Load configuration files for the default server block.
include /etc/nginx/default.d/*.conf;
location / {
}
}
}
然后多个工程的不同配置文件可放在/conf.d/文件夹下:
upstream servers {
server 127.0.0.1:8095;
}
server {
listen 443 ssl;
listen [::]:443 ssl;
server_name 域名;
ssl_certificate ssl/a.fullchain;
ssl_certificate_key ssl/a.key;
ssl_session_timeout 5m;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
client_max_body_size 20M;
location / {
send_timeout 120;
proxy_pass http://servers;
proxy_set_header HOST $http_host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header HTTP_CDN_SRC_IP $http_cdn_src_ip;
proxy_redirect http://$server_name/ https://$server_name/;
}
}
server {
listen 80;
server_name 域名;
location / {
return 301 https://$server_name$request_uri;
}
}
如上的配置包含了https的相关配置,‘域名’可以是二级域名,如果同时希望用户访问www.域名.com,域名.com同时可以实现跳转,那么需要配置两个listen 80的server配置,如下:
server {
listen 80;
listen [::]:80; //IPV6
server_name www.域名.cn;
location / {
return 301 https://$server_name$request_uri;
}
}
server {
listen 80;
listen [::]:80;
listen 443 ssl;
listen [::]:443 ssl;
server_name 域名.cn;
location / {
return 301 https://www.域名.cn$request_uri;
}
}
实现非80(443)端口的https配置
upstream servers {
server 127.0.0.1:8095;
}
server {
listen 6002;
ssl on;
server_name 域名;
ssl_certificate ssl/a.pem;
ssl_certificate_key ssl/a.key;
ssl_session_timeout 5m;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
client_max_body_size 20M;
location / {
send_timeout 120;
proxy_pass http://servers;
proxy_set_header HOST $http_host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header HTTP_CDN_SRC_IP $http_cdn_src_ip;
}
// 访问http 6002端口跳转到https
error_page 497 https://$server_name:6002$request_uri;
}
随机启动
vi /etc/rc.local, 使用vi 编辑器打开随机启动配置文件,并在其中加入下面一行代码(具体路径根据安装方式有所不同):
/usr/local/nginx/sbin/nginx
Nginx变量
$arg_PARAMETER 功能:如果在请求中设置了查询字符串,那么这个变量包含在查询字符串是GET请求PARAMETER中的值。
$args 功能:该变量的值是GET请求在请求行中的参数。
$binary_remote_addr 功能:二进制格式的客户端地址
$body_bytes_sent 功能:响应体的大小,即使发生了中断或者是放弃,也是一样的准确。
$content_length 功能:该变量的值等于请求头中的Content-length字段的值
$cookie_COOKIE 功能:该变量的值是cookie COOKIE的值
$document_root 功能:该变量的值为当前请求的location(http,server,location,location中的if)中root指令中指定的值。
$document_uri 功能:同$uri
$host 功能:该变量的值等于请求头中Host的值。如果Host无效时,那么就是处理该请求的server的名称。
在下列情况中,$host变量的取值不同于$http_host变量。
当请求头中的Host字段未指定(使用默认值)或者为空值,那么$host等于server_name指令指定的值。
当Host字段包含端口是,$host并不包含端口号。另外,从0.8.17之后的nginx中,$host的值总是小写。
$hostname 功能:有gethostname返回值设置机器名。
$http_HEADER 功能:该变量的值为HTTP 请求头HEADER,具体使用时会转换为小写,并且将“——”(破折号)转换为"_"(下划线)。
$is_args 功能: 如果设置了$args,那么值为“?”,否则为“”
$limit_rate 功能:该变量允许限制连接速率。
$nginx_version 功能: 当前运行的nginx的版本号
$query_string 功能:同$args
$remote_addr 功能:客户端的IP地址
$remote_user 功能: 该变量等于用户的名字,基本身份验证模块使用。
$remote_port 功能: 客户端连接端口
$request_filename 功能:该变量等于当前请求文件的路径,有指令root或者alias和URI构成。
$request_body 功能:该变量包含了请求体的主要信息。该变量与proxy_pass或者fastcgi_pass相关。
$request_body_file 功能:客户端请求体的临时文件。
$request_completion 功能:如果请求成功完成,那么显示“OK”。如果请求没有完成或者请求不是该请求系列的最后一部分,那么它的值为空。
$request_method 功能:该变量的值通常是GET或者POST。
$request_uri 功能:该变量的值等于原始的URI请求,就是说从客户端收到的参数包括了原始请求的URI,该值是不可以被修改的,不包含主机名,例如“/foo/bar.php?arg=baz”。
$scheme 功能:该变量表示HTTP scheme(例如HTTP,HTTPS),根据实际使用情况来决定,
例如:rewrite ^ $scheme://example.com$uri redirect;
$server_addr 功能:该变量的值等于服务器的地址。通常来说,在完成一次系统调用之后就会获取变量的值,为了避开系统钓鱼,那么必须在listen指令中使用bind参数。
$server_name 功能:该变量为server的名字。
$server)port 功能:该变量等于接收请求的端口。
$server_protocol 功能:该变量的值为请求协议的值,通常是HTTP/1.0或者HTTP/1.1
$uri 功能:该变量的值等于当前请求中的URI(没有参数,不包括$args)的值。它的值不同于request_uri,由浏览器客户端发送的request_uri的值。例如,可能会被内部重定向或者使用index。
另外需要注意:$uri不包含主机名,例如 "/foo/bar.html"