nginx常用配置

官方文档:http://nginx.org/en/docs/

官方源安装nginx

cat>/etc/yum.repos.d/nginx.repo<<EOF
[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/\$releasever/\$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
EOF
yum -y install nginx

默认配置文件

#  /etc/nginx/nginx.conf        主配置文件
#第一个部分: 配置文件主区域配置
    user  www;                   #定义worker进程管理的用户
    补充: nginx的进程
    master process:  主进程        #管理服务是否能够正常运行   boss
    worker process:  工作进程   #处理用户的访问请求         员工  
        worker_processes  2;        #定义有几个worker进程  == CPU核数 / 核数的2倍
    error_log  /var/log/nginx/error.log warn;   # 定义错误日志路径信息
    pid        /var/run/nginx.pid;              #定义pid文件路径信息
    
#第二个部分: 配置文件事件区域
    events {                    
        worker_connections  1024;   #一个worker进程可以同时接收1024访问请求
    }
    
#第三个部分: 配置http区域
    http {
        include       /etc/nginx/mime.types;      #加载一个配置文件
        default_type  application/octet-stream;   #指定默认识别文件类型
        log_format  main  '$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  main;   #指定日志路径          
        sendfile on; #特殊的数据传输功能
        tcp_nopush on; #参数sendfile on用于开启文件高效传输模式,同时将tcp_nopush_on和tcp_nodelay on两个指令为on,可防止网络及磁盘I/O阻塞,提升Nginx工作效率
        keepalive_timeout  65;   #超时时间
        include /etc/nginx/conf.d/*.conf;       #加载配置文件
    }
# /etc/nginx/nginx.d/default  ---扩展配置(虚拟主机配置文件)
#第四个部分: server区域信息(配置一个网站 www/bbs/blog -- 一个虚拟主机)
    server {
        listen       8080;                #指定监听的端口
        server_name  www.oldgao.cn;      #指定网站域名                     
        root   /usr/share/nginx/html;     #定义站点目录的位置
        index  index.html index.htm;      #定义首页文件
        error_page   500 502 503 504  /50x.html;   #优雅显示页面信息
        location = /50x.html {
            root   /usr/share/nginx/html;
        }
    }

配置https

  1. 首先申请SSL证书
  2. 查看NGINX是否安装SSL模块
./nginx -V # 注意,是大写的V,如果有ssl_module那就说明有,没有就自行安装
  1. 新建一个server,加入以下内容
server {
    listen    80;
    server_name    www.xxxx.com;
    rewrite ^(.*) https://$server_name$1 permanent; # 这里重定向到https
}

server {
    listen       443 ssl;
    server_name  www.xxxx.com;

    ssl_certificate      ../certificate/xxx.pem; # 这里是下载下来的证书
    ssl_certificate_key  ../certificate/xxx.key; # 这里是下载下来的证书

    ssl_session_cache    shared:SSL:1m; # 这里是开启缓存 大小1M
    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; #用来指定所开启协议的版本,目前1.2是主流而且更高效。不安全的SSLv2 和 SSLv3 都要禁用。
    ssl_prefer_server_ciphers  on;  # 设置协商加密算法时,优先使用我们服务端的加密套件,而不是客户端浏览器的加密套件。

    location / {
        root   html;
        index  index.html index.htm;
    }
}

4、检查配置以及重启

# 检查配置
 ./nginx -t
 # 重启 
./nginx -s reload

location作用说明

location进行匹配(uri)
错误页面优雅显示

    location /oldgao {
       root /html/www;
       error_page  404  /oldgao.jpg;
    }

前端请求后端避免跨域问题

location /api/ {
        proxy_pass http://127.0.0.1:8000;
    }

location详细配置:
Syntax: location [ = | ~ | ~* | ^~ ] uri { ... }

  • = 开头表示精确匹配。如 A 中只匹配根目录结尾的请求,后面不能带任何字符串;
  • ^~ 开头表示uri以某个常规字符串开头,不是正则匹配;
  • ~ 开头表示区分大小写的正则匹配;
  • ~* 开头表示不区分大小写的正则匹配;
  • / 通用匹配, 如果没有其它匹配,任何请求都会匹配到。
    location = / {              ### 精确匹配    优先级01 最高
    [ configuration A ]
    }
    
    location ^~ /images/ {      ### 优先匹配/不识别uri信息中符号信息       优先级02
        [ configuration B ]
    }

    location /documents/ {      ### 按照目录进行匹配    优先级03
        [ configuration C ]
    }
      
    location ~ \.(gif|jpg|jpeg)$ {  ###区分大小写进行正则匹配  优先级03
        [ configuration D ]
    }

    location ~* \.(gif|jpg|jpeg)$ {  ###不区分大小写进行正则匹配  优先级03
        [ configuration E ]
    }

    location / {                   ### 默认匹配    优先级04 最低
        [ configuration F ]
    }

常用参数

try_files
放置位置 location

按指定的file顺序查找存在的文件,并使用第一个找到的文件进行请求处理,查找路径是按照给定的root或alias为根路径来查找的,如果给出的file都没有匹配到,则重新请求最后一个参数给定的uri,就是新的location匹配,如果是格式2,如果最后一个参数是 = 404 ,若给出的file都没有匹配到,则最后返回404的响应码。

location / {
            root /var/www/html/dist;
            index index.html index.htm;
            try_files $uri $uri/ /index.html;
    }

client_max_body_size
放置位置 http, server, location

client_max_body_size 默认 1M,表示 客户端请求服务器最大允许大小,在“Content-Length”请求头中指定。如果请求的正文数据大于client_max_body_size,HTTP协议会报错 413 Request Entity Too Large。就是说如果请求的正文大于client_max_body_size,一定是失败的。如果需要上传大文件,一定要修改该值。

location / {
            root /var/www/html/dist;
            index index.html index.htm;
            client_max_body_size  512m;
    }

root
放置位置server,http,location

真实的路径是root指定的值加上location指定的值 。

    location /i/ {  
        root /data/w3;
    }

请求 http://oldgao.cn/i/top.gif 时,在服务器查找的资源路径是:/data/w3/i/top.gif
alias
放置位置 location

alias 正如其名,alias指定的路径是location的别名,不管location的值怎么写,资源的真实路径都是 alias 指定的路径 ,比如:

location /i/ {  
  alias /data/w3/;
}

请求 http://oldgao.cn/i/top.gif 时,在服务器查找的资源路径是: /data/w3/top.gif

常用功能

1. 搭建一个多网站(www bbs blog)

vim /etc/nginx/conf.d/myserver.conf

    server {
       listen        80;
       server_name   bbs.oldgao.com;
       location  / {
         root  /html/bbs;
         index index.html;
       }
    }
    server {
       listen        80;
       server_name   blog.oldgao.com;
       location  / {
         root  /html/blog;
         index index.html;
       }
    }
    server {
       listen        80;
       server_name   www.oldgao.com;
       location  / {
         root  /html/www;
         index index.html;
       }
    }
2. 访问控制

10.0.0.0/24 不能访问 www.oldgao.com/AV/
172.16.1.0/24 可以访问 www.oldgao.com/AV/

 location /AV {
           deny  10.0.0.0/24;
           allow 172.16.1.0/24;
           root  /html/www;
           index index.html;
         }
3. 密码认证

生成密码文件

#查看有没有`htpasswd`命令
rpm -qf `which htpasswd` 
#如果没有需要安装httpd-tools
yum -y install httpd-tools
#创建目录
mkdir /etc/nginx/password
#生成密码文件
htpasswd -bc /etc/nginx/password/htpasswd admin 123456

修改配置文件

 location / {
           root  /html/www;
           index index.html;
           auth_basic      "提示";
           auth_basic_user_file password/htpasswd;
         }  

修改权限

chown nginx. /etc/nginx/password/htpasswd
chmod 600 /etc/nginx/password/htpasswd 
4. 搭建网站文件共享服务器
  location / {
         root /file;  #指定哪个目录作为Http文件服务器的根目录,如果你这里写了file就是你的根目录,那么访问的时候file就不会出现在目录中
            autoindex on;   #设置允许列出整个目录
            autoindex_exact_size off; #默认为on,显示出文件的确切大小,单位是bytes。改为off后,显示出文件的大概大小,单位是kB或者MB或者GB
            autoindex_localtime on; #默认为off,显示的文件时间为GMT时间。改为on后,显示的文件时间为文件的服务器时间
            charset utf-8; #防止文件乱码显示, 如果用utf-8还是乱码,就改成gbk试试
    }
5. 对网站进行状态监控
location = /basic_status {
        stub_status;
    }
6. 实现页面跳转功能

rewrite
放置位置 server, location, if
匹配正则表达式

首页重定向到其他地方,网站首页一上来不想展示原先的内容要展示子路径的内容

location =/ {
        rewrite ^(.*)$ http://www.oldgao.cn:9999/index.php/home;
    }

现在公司旧域名www.google.com有业务需求变更,需要使用新域名www.oldgao.cn代替,但是旧域名不能废除,需要跳转到新域名上,而且后面的参数保持不变。

server {
    listen       80;
    server_name  www.google.com;
    charset utf-8;
    access_log  /var/log/nginx/www.google.cn.access.log;
    location / {
        if ($host = 'www.google.com'){
            rewrite ^/(.*)$ http://www.oldgao.cn/$1 permanent; #permanent:永久跳转 301 会将跳转信息进项缓存, redirect:302  临时跳转 不会缓存跳转信息
        }
        root   html;
        index  index.html index.htm;
    }
}

今天公司业务新版本上线,要求所有 IP 访问任何内容都显示一个固定维护页面,只有公司 IP :10.0.0.12访问正常。

server {
    listen       80;
    server_name  www.oldgao.cn;     #域名修改   
    charset utf-8;
    access_log  /var/log/nginx/access.log;      #日志修改

    #设置是否合法的IP标记
    set $isrewrite true;                            #设置变量$rewrite,变量值为boole值true
    #判断是否为合法IP
    if ($remote_addr = "10.0.0.12"){        #当客户端IP为10.0.0.12时,将变量值设为false,不进行重写
        set $isrewrite false;
    }
    #除了合法IP,其它都是非法IP,进行重写跳转维护页面
    if ($isrewrite = true){                     #当变量值为true时,进行重写
        rewrite (.+) /weihu.html;               #将域名后边的路径重写成/weihu.html
    }
    location = /weihu.html {
        root /usr/share/nginx/html;                     #网页返回/var/www/html/weihu.html的内容
    }
    
    location / {
        root   /usr/share/nginx/html;
        index  index.html index.htm;
    }
}

反向代理和负载均衡

upstream oldgao {  #负载均衡
       server 10.0.0.7:80;
       server 10.0.0.8:80;
       server 10.0.0.9:80;
    }
server {
        listen       80;
        server_name  www.oldgao.cn;
        location / {
           proxy_pass http://oldgao;    #反向代理、
           proxy_set_header Host $host; #这一行的作用是把原http请求的Header中的Host字段也放到转发的请求里。如果不加这一行的话,nginx转发的请求header里就不会有Host字段,而服务器是靠这个Host值来区分你请求的是哪个域名的资源的。
           proxy_set_header X-Forwarded-For $remote_addr; #转发请求时带用户ip,可以在web服务器端获得用户的真实ip
           proxy_next_upstream error timeout http_404 http_502 http_403; #屏蔽错误页面,提高用户体验
        }
}
负载均衡配置模块详细说明
  1. 轮询分配请求(平均)
 upstream oldgao {
          server 10.0.0.7:80;
          server 10.0.0.8:80;
          server 10.0.0.9:80;
       }
  1. 权重分配请求(能力越强责任越重)
 upstream oldgao {
          server 10.0.0.7:80 weight=3;
          server 10.0.0.8:80 weight=2;
          server 10.0.0.9:80 weight=1;
  }
  1. 实现热备功能(备胎功能)
upstream oldgao {
          server 10.0.0.7:80;
          server 10.0.0.8:80;
          server 10.0.0.9:80 backup;
       }
  1. 健康检查参数
#Nginx基于连接探测,如果发现后端异常,在单位周期为fail_timeout设置的时间中达到max_fails次数,这个周期次数内,如果后端同一个节点不可用,那么接将把节点标记为不可用,并等待下一个周期(同样时常为fail_timeout)再一次去请求,判断是否连接是否成功。
upstream oldgao {
          server 10.0.0.7:80 max_fails=5 fail_timeout=10s;  # 定义最大失败次数;定义失败之后重发的间隔时间
          server 10.0.0.8:80 max_fails=5 fail_timeout=10s;
          server 10.0.0.9:80 backup;
       }
根据用户访问的终端信息显示不同页面
 upstream web {
       server 10.0.0.8:80;
    }
 upstream mobile {
       server 10.0.0.7:80;
    }
 upstream default {
       server 10.0.0.9:80;
    }
    
    
 server {
        listen       80;
        server_name  www.oldboy.com;
        location / {
           if ($http_user_agent ~* iphone) {
              proxy_pass http://mobile;
           }
           if ($http_user_agent ~* Chrome) {
             proxy_pass  http://web;
           }
           proxy_pass http://default;
           proxy_set_header Host $host;
           proxy_set_header X-Forwarded-For $remote_addr;
           proxy_next_upstream error timeout http_404 http_502 http_403;
        }
    }
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,193评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,306评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,130评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,110评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,118评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,085评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,007评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,844评论 0 273
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,283评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,508评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,667评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,395评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,985评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,630评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,797评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,653评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,553评论 2 352

推荐阅读更多精彩内容

  • #设置nginx进程数,推荐按照cpu数目来指定,一般跟cpu核数相同,或者1cpu< xx <2*cpu 。可以...
    d47774902dd4阅读 210评论 0 0
  • ubuntu的目录结构和说明 ps:其他系统目录结构可能不一样,但是配置文件都是一样通用的,这里简单说一下ubun...
    曹渊说创业阅读 310评论 0 0
  • 在Nginx配置文件中,每一条指令配置都必须以分号结束,请不要忘记。 用户组配置 用于配置运行Nginx服务器用户...
    微笑的鱼23333阅读 3,649评论 0 0
  • # 常用配置 语法规则: location [=|~|~*|^~] /uri/ { … } = 开头表示精确匹配 ...
    小小的忧伤阅读 569评论 0 1
  • ubuntu的目录结构和说明 ps:其他系统目录结构可能不一样,但是配置文件都是一样通用的,这里简单说一下ubun...
    曹渊说创业阅读 3,116评论 0 0