前端Nginx入门配置

  1. Nginx 的优势

    • 支持海量并发
    • 内存消耗少
    • 免费可以商用
    • 配置文件简单
  2. 搭建本地虚拟机环境

    yum -y install gcc gcc-c++ autoconf pcre-devel make automake
    yum -y install wget httpd-tools vim
    
  3. Nginx 源的安装

     [nginx]
     name=nginx repo
     baseurl=http://nginx.org/packages/centos/7/$basearch/
     gpgcheck=0
     enabled=1
    
    • 新创建 yum 源: vim /etc/yum.repos.d/nginx.repo
    • 查看安装位置 rpm -ql nginx
  4. /etc/nginx/nginx.conf

     # 运行用户
     user  nginx;
     # 进程数, 一般跟CPU数一样, 有利于Nginx处理高并发
     worker_processes  1;
    
     # 错误日志存放位置
     error_log  /var/log/nginx/error.log warn;
    
     # nginx 存放pid位置
     pid        /var/run/nginx.pid;
     events {
         # 后台允许最大并发数量 一般设置上万
         worker_connections  1024;
     }
    
     http {
       # 文件扩展名与类型映射表
       include       /etc/nginx/mime.types;
    
       # 默认文件类型
       default_type  application/octet-stream;
    
       # 设置日志模式 名称为main
       log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                         '$status $body_bytes_sent "$http_referer" '
                         '"$http_user_agent" "$http_x_forwarded_for"';
    
       # 日志存放位置 和 启用的日志格式为上面标识的main
       access_log  /var/log/nginx/access.log  main;
    
       # 开启高速传输模式
       sendfile        on;
    
       # 减少网络报文的数量
       #tcp_nopush     on;
    
       # 保持连接的时间 (超时时间)
       keepalive_timeout  65;
    
       # 资源压缩
       #gzip  on;
    
       # 包含的子文件配置 (自定义配置项)
       include /etc/nginx/conf.d/*.conf;
     }
    
  5. 自配置项 /etc/nginx/conf.d/default.conf

     server {
       # 监听的端口
       listen       80;
       # 监听服务名
       server_name  localhost;
    
       #charset koi8-r;
       #access_log  /var/log/nginx/host.access.log  main;
    
       # 访问根路径的时候 请求资源路径
       location / {
         root   /usr/share/nginx/html;
         index  index.html index.htm;
       }
    
       #error_page  404              /404.html;
    
       # redirect server error pages to the static page /50x.html
       #
       error_page   500 502 503 504  /50x.html;
       location = /50x.html {
         root   /usr/share/nginx/html;
       }
    
       # proxy the PHP scripts to Apache listening on 127.0.0.1:80
       #
       #location ~ \.php$ {
       #   proxy_pass   http://127.0.0.1;
       #}
    
       # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
       #
       #location ~ \.php$ {
       #    root           html;
       #    fastcgi_pass   127.0.0.1:9000;
       #    fastcgi_index  index.php;
       #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
       #    include        fastcgi_params;
       #}
    
       # deny access to .htaccess files, if Apache's document root
       # concurs with nginx's one
       #
       #location ~ /\.ht {
       #    deny  all;
       #}
     }
    
  6. 服务开启 (各种命令)

    • 虚拟机情况下先关闭防火墙: service iptables stop
    • 开启服务: service nginx start
    • 配置语法检查 nginx -t -c /etc/nginx/nginx.conf
    • 配置重载 nginx -s reload -c /etc/nginx/nginx.conf
    • CentOS 7.4 以上可以使用 nginx 直接启动
    • ps aux | grep nginx
    • 停止服务 nginx -s quit
    • 立即停止 nginx -s stop
    • nginx -s reload
    • 或者 systemctl start nginx.service, systemctl restart nginx.service
    • systemctl stop nginx.service
    • 查看端口号开启情况 netstat -tlnp
  7. 自定义错误页和访问设置

    • 多错误指向一个页面

      # 在root配置目录下创建40x.html 加入内容
      error_page 404 /40x.html;
      # 亦可以404时指向外部链接
      # error_page 404 htts://www.baidu.com/
      
      location = /40x.html {
      }
      
    • 简单的访问控制

      location / {
         root /urs/share/nginx/html;
         deny   222.20.38.207;
         ## deny all;
         ## allow  192.168.74.129; 只允许部分ip访问
         ## deny和allow上述两行顺序不一样的话, 先出现的会覆盖后出现的
      }
      
    • 精确匹配

      location ~\.php$ {
         allow 192.168.74.129;
         deny all;
      }
      ## 上面的配置表示只允许192.168.74.129进行访问,其他的IP是禁止访问的
      
  8. Nginx 设置虚拟主机

    虚拟主机是指在一台物理主机服务器上划分出多个磁盘空间,每个磁盘空间都是一个虚拟主机,每台虚拟主机都可以对外提供 Web 服务,并且互不干扰。

    • 基于端口号配置虚拟主机

      • 在 conf.d 下添加 server_8081.conf

        server {
            listen       8081;
            server_name  localhost;
            root /opt/app/code;
        
            location / {
                index server_1.html;
            }
        
            error_page 404 /40x.html;
            location = /40x.html {
            }
        
            error_page 500 502 503 504 /50x.html;
                location = /50x.html {
            }
        }
        
    • 基于 ip 的虚拟主机 (在 server_8081.conf 文件中修改为)

      server {
         listen 80;
         # 同样监听80端口,把server_name选项,配置成IP就可以
         server_name 192.168.74.130;
         root /opt/app/code;
         location / {
             index server_2.html;
         }
      }
      
  9. 域名 Nginx 设置虚拟主机

    • 需要在域名设置中将域名映射到自己购买的 ip
     # default.conf
     listen 80;
     server_name www.confidecnce.com;
     root /opt/app/code;
     location / {
         index server_1.html;
     }
    
     # server_2.conf
     listen 80;
     server_name nginx.confidecnce.com;
     root /opt/app/code;
     location / {
         index server_2.html;
     }
    
     # server_3.conf
     listen 80;
     server_name node.confidecnce.com;
     root /opt/app/code;
     location / {
         index server_3.html;
     }
    
  10. Nginx 反向代理

    代理就是在 Client 端和 Server 端之间增加一个提供特定功能的服务器

    正向代理 (正向代理 代理的对象是客户端, 客户端请求客户端, 为客户端服务的)

    翻墙工具, 为客户端做代理, 简单来说就是你想访问目标服务器的权限,但是没有权限。这时候代理服务器有权限访问服务器,并且你有访问代理服务器的权限,这时候你就可以通过访问代理服务器,代理服务器访问真实服务器,把内容给你呈现出来。

    反向代理 (反向代理 代理的对象四服务端, 客户端请求服务端, 为服务端服务的)

    为服务器做代理(可能代理到不同的服务器上), 反向代理跟代理正好相反(需要说明的是,现在基本所有的大型网站的页面都是用了反向代理),客户端发送的请求,想要访问 server 服务器上的内容。发送的内容被发送到代理服务器上,这个代理服务器再把请求发送到自己设置好的内部服务器上,而用户真实想获得的内容就在这些设置好的服务器上。

    • 优势
      • 提高了安全性(攻击的只是代理服务器)
      • 功能性, 提供负载均衡
      • 缓存功能, 减小服务器压力
    ## proxy_pass.conf
    
    upstream con_test {
      server 192.168.74.129:8081;
      server 192.168.74.129:8082;
      server 192.168.74.129:8083;
    }
    
    proxy_cache_path /opt/app/cache levels=1:2 keys_zone=conf_cache:10m max_size=10g inactive=60m use_temp_path=off;
    
    server {
      listen       8080;
      server_name  192.168.74.129:8080 static.confidence.test;
      sendfile on;
      access_log /var/log/nginx/static_test_access.log main;
    
      location / {
          # Nginx 缓存设置
          #proxy_cache conf_cache; # 要关闭的话 直接改成off 就可以禁止掉缓存
          proxy_cache off; # 要关闭的话 直接改成off 就可以禁止掉缓存
          proxy_pass http://con_test;
          proxy_cache_valid 200 304 12h; # 对于200和304设置12个小时过期
          proxy_cache_valid any 10m; # 非200 304的设置10分钟过期
          proxy_cache_key $host$uri$is_args$args;
          add_header Nginx-Cache "$upstream_cache_status";
    
          proxy_redirect default;
    
          # 将客户端请求转送给后台服务器之前 修改来自客户端的发送的头信息
          proxy_set_header Host $http_host;
          proxy_set_header X-Real-IP $remote_addr;
    
          # 配置Nginx与后端代理服务器尝试建立连接的超时时间
          proxy_connect_timeout 30;
          # 配置Nginx向后端服务器组发出write请求后, 等待响应的超时时间
          proxy_send_timeout 60;
          # 配置Nginx向后端服务器组发出read请求后, 等待响应的超时时间
          proxy_read_timeout 60;
          proxy_buffer_size 32k;
          proxy_buffering on;
          proxy_buffers 4 128k;
          proxy_busy_buffers_size 256k;
          proxy_max_temp_file_size 256k;
          #if ($http_x_forwarded_for !~* "^192\.168\.74\.129") {
          #   return 403;
          #}
          #root /opt/app/code;
          #index index.html index.htm;
      }
    
      location /stat {
          stub_status;
      }
    
      ## 反向代理 将所有的请求 /text_proxy 请求跳转到 localhost:8080/lyt.jpeg
      location /test_proxy {
        proxy_pass http://localhost:8080/lyt.jpeg;
      }
    
      location ~ .*\.(jpg|jpeg|gif|png)$ {
        gzip on;
        gzip_http_version 1.1;
        gzip_comp_level 2;
        gzip_types text/plain application/javascript application/x-javascript text/css application/xml image/gif image/png image/jpeg;
        valid_referers none blocked 192.168.74.129;
        if ($invalid_referer) {
                return 403;
        }
        root /opt/app/code/images;
      }
    
      location ~ .*\.(html|htm)$ {
        add_header Access-Control-Allow-Origin http://www.confidence.test;
        add_header Access-Control-Allow-Methods GET,POST,PUT,DELETE,OPTIONS;
        expires 24h;
        root /opt/app/code;
      }
    
      location ~ .*\.(txt|xml)$ {
        # gzip on;
        # gzip_http_version 1.1;
        # gzip_comp_level 2;
        # gzip_types text/plain application/javascript application/x-javascript text/css application/xml image/gif image/png images/jpeg;
        root /opt/app/code/doc;
      }
    
      location ~ ^/download {
        gzip_static on;
        tcp_nopush on;
        root /opt/app/code;
      }
    }
    
  11. Nginx 适配 PC 或移动设备

    server{
      listen 80;
      server_name nginx.confidence.com;
      location / {
        # 默认展示pc目录下 index.html
        root /opt/app/code/pc;
    
        # 通过用户代理系统应用, 如果是移动端系统展示移动端网页
        if ($http_user_agent ~* '(Android|webOS|iPhone|iPod|BlackBerry)') {
          root /opt/app/code/mobile;
        }
        index index.html;
      }
    }
    
  12. Nginx Gzip 压缩配置

    • gzip : 该指令用于开启或 关闭 gzip 模块。
    • gzip_buffers : 设置系统获取几个单位的缓存用于存储 gzip 的压缩结果数据流。
    • gzip_comp_level : gzip 压缩比,压缩级别是 1-9,1 的压缩级别最低,9 的压缩级别最高。压缩级别越高压缩率越大,压缩时间越长。
    • gzip_disable : 可以通过该指令对一些特定的 User-Agent 不使用压缩功能。
    • gzip_min_length:设置允许压缩的页面最小字节数,页面字节数从相应消息头的 Content-length 中进行获取。
    • gzip_http_version:识别 HTTP 协议版本,其值可以是 1.1.或 1.0.
    • gzip_proxied : 用于设置启用或禁用从代理服务器上收到相应内容 gzip 压缩。
    • gzip_vary : 用于在响应消息头中添加 Vary:Accept-Encoding,使代理服务器根据请求头中的 Accept-Encoding 识别是否启用 gzip 压缩。
    location ~ .*\.(jpg|jpeg|gif|png)$ {
      # 开启gzip (关闭是 off)
      gzip on;
      # 识别 HTTP 协议版本
      gzip_http_version 1.1;
      # gzip 压缩比(1~9) 压缩级别越大, 时间消耗越长
      gzip_comp_level 2;
      # 压缩文件类型
      gzip_types text/plain application/javascript application/x-javascript text/css application/xml image/gif image/png image/jpeg;
      valid_referers none blocked 192.168.74.129;
      if ($invalid_referer) {
        return 403;
      }
      root /opt/app/code/images;
    }
    
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,524评论 5 460
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,869评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,813评论 0 320
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,210评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,085评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,117评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,533评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,219评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,487评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,582评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,362评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,218评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,589评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,899评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,176评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,503评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,707评论 2 335

推荐阅读更多精彩内容