• nginx的安装部署以及使用


    介绍

    nginx是现在互联上非常流行的高性能的 Web反向代理 服务器,也是一个 IMAP/POP3/SMTP 代理服务器。

    现在很多互联网应用都使用nginx来作为负载均衡的使用,再高并发的情况下,使用Nginx来代替Apache是一种很不错的选择。

       

    安装

       

    ·安装编译工具以及库文件·

    yum -y install make zlib zlib-devel gcc-c++ libtool openssl openssl-devel

       

    ·安装PCRE·

    PCRE的作用是为了Nginx支持Rewrite功能

          1. 下载PCRE安装包

       2. 解压

    tar zxvf pcre-8.35.tar.gz

       3. 进入安装包目录,编译安装

    cd pcre-8.35
    ./configure
    make && make install

         4. 查看版本

    pcre-config --version

       

    ·安装nginx·

         1. 下载安装包

       2. 解压

    tar zxvf nginx-1.6.2.tar.gz

       3. 进入安装包目录,编译安装

    cd nginx-1.6.2
    ./configure --prefix=/usr/local/webserver/nginx --with-http_stub_status_module --with-http_ssl_module --with-pcre=/usr/local/src/pcre-8.35

    make && make install

       4. 查看nginx版本

    /usr/local/webserver/nginx/sbin/nginx -v

       5. 将nginx命令设置为全局

    cp /usr/local/webserver/nginx/sbin/nginx /usr/bin

       

    配置

       

    vim /usr/local/webserver/nginx/conf/nginx.conf

       

    worker_processes 2; #设置值和CPU核心数一致
     

    server {

    listen 80; #监听端口

    }

       

    启动

       

    修改完成配置之后,使用以下命令检查一下配置:

    nginx -c /usr/local/webserver/nginx/conf/nginx.conf

    nginx -t

       

    使用以下命令加载配置文件并重启

    nginx -s reload

       

    查看一下防火墙是否关闭,如果未关闭需要关闭,否则从浏览器访问80端口可能受阻。

    systemctl status firewalld
    systemctl stop firewalld

       

    在浏览器页面上输入IP加端口,可以显示出以下页面即为安装成功(可能需要等待几分钟)  

       

    配置优化

    以上的配置只是最最基本的配置,只能让nginx简单得跑起来,我们依然需要以下配置使nginx实现反向代理或者负载均衡

       

    设置用户

    #user nobody;

       

    工作进程数,一般设置为cpu核心数

    worker_processes 1;

       

    pid文件(保证进程只有一个)

    pid /run/nginx.pid;

       

    events {

    最大连接数,一般设置为cpu*2048

    worker_connections 1024;

    }

       

    http {

    开启gzip压缩(提高传输速率)(需要客户端浏览器和nginx服务器同时支持

    gzip on;

       

    压缩最小文件大小

    gzip_min_lenth 1k;

       

    压缩申请内存(4个16k的数据流)

    gzip_buffers 4 16k;

       

    http协议版本号(不对应的话是不支持压缩的)

    gzip_http_version 1.1;

       

    如果客户端浏览器不支持,则不进行压缩

      gzip_vary on;

       

    日志格式

    log_format main

       

    客户端IP 客户端用户名 请求URL

    '$remote_addr - $remote_user [$time_local] "$request" '

       

    请求状态 返回给客户端的字节数 源网页(百度->百度贴吧)

    '$status $body_bytes_sent "$http_referer" '

       

    客户端浏览器信息 客户端IP地址(和$remote_addr差不多)

    '"$http_user_agent" "$http_x_forwarded_for"';

       

    日志路径 off代表不存储日志,后面跟着日志的位置,main代表使用的日志格式

    access_log off

    access_log logs/access.log main;

     

    客户端链接超时时间(有长连接的时候,这个字段需要设置大一点)

    keepalive_timeout 65;

       

    当配置多个server节点时,默认server names的缓存区大小就不够了,需要手动设置大一点

    server_names_hash_bucket_size 512;

       

    server表示虚拟主机可以理解为一个站点,可以配置多个server节点搭建多个站点

    每一个请求进来由server_name确定使用哪个server

    server {

       

    站点监听端口

    listen         8800;

       

    站点访问域名,可以通过此字段判断使用哪个server

    server_name localhost;

       

    编码格式,避免url参数乱码

    charset utf-8;

       

    location用来匹配同一域名下多个URI的访问规则比如动态资源如何跳转,静态资源如何跳转等location后面跟着的/代表匹配规则

    location / {

       

    站点根目录,可以是相对路径,也可以是绝对路径

    root html;

       

    默认主页

    index index.html;

       

    转发后端站点地址,一般用于做软负载轮询后端服务器

    proxy_pass http://10.11.12.237:8080;

       

    拒绝请求,返回403,一般用于某些目录禁止访问

    #deny all;

       

    允许请求

    #allow all;

       

    给请求头中添加客户请求主机名

    proxy_set_header Host $host;

       

    给请求头中添加客户端IP

    proxy_set_header X-Real-IP $remote_addr;

       

    将$remote_addr变量值添加在客户端"X-Forwarded-For"请求头的后面,并以逗号分隔。

    如果客户端请求未携带"X-Forwarded-For"请求头,$proxy_add_x_forwarded_for变量值将与$remote_addr变量相同

    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

       

    给请求头中添加客户端的Cookie

    proxy_set_header Cookie $http_cookie;

       

    修改从被代理服务器传来的应答头中的"Location"和"Refresh"字段。

    proxy_redirect [ default | off | redirect replacement ]

       

    如果使用"default"参数,将根据location和proxy_pass参数的设置来决定。

    location /one/ {

      proxy_pass http://upstream:port/two/;

      proxy_redirect default;

    }

       

    location /one/ {

      proxy_pass http://upstream:port/two/;

      proxy_redirect http://upstream:port/two/ /one/;

    }

       

       

    参数off将在这个字段中禁止所有的proxy_redirect指令

    proxy_redirect off;

       

    被代理服务器返回Location字段为: http://localhost:8000/two/some/uri/

    将Location字段重写为 http://frontend/one/some/uri/

    proxy_redirect http://localhost:8000/two/ http://frontend/one/;

       

    使用服务器的基本名称和端口,即使它来自非80端口

    proxy_redirect http://localhost:8000/two/ /;

       

    浏览器对 Cookie 有很多限制,如果 Cookie 的 Domain 部分与当前页面的 Domain 不匹配就无法写入。

    所以如果请求 A 域名,服务器 proxy_pass 到 B 域名,然后 B 服务器输出 Domian=B 的 Cookie,

    前端的页面依然停留在 A 域名上,于是浏览器就无法将 Cookie 写入

       

    不仅是域名,浏览器对 Path 也有限制。

    我们经常会 proxy_pass 到目标服务器的某个 Path 下,不把这个 Path 暴露给浏览器。

    这时候如果目标服务器的 Cookie 写死了 Path 也会出现 Cookie 无法写入的问题。

       

    设置"Set-Cookie"响应头中的domain属性的替换文本,其值可以为一个字符串、正则表达式的模式或一个引用的变量

    转发后端服务器如果需要Cookie则需要将cookie domain也进行转换,否则前端域名与后端域名不一致cookie就会无法存取

    配置规则。

    proxy_cookie_domain serverDomain(后端服务器域) nginxDomain(nginx服务器域)

    proxy_cookie_domain localhost .testcaigou800.com;

       

    取消当前配置级别的所有proxy_cookie_domain指令

    proxy_cookie_domain off;

       

    与后端服务器建立连接的超时时间。一般不可能大于75秒;(只是一般情况,有些长处理可能超时时间较长)

    proxy_connect_timeout 30;

    }

       

    后端服务器返回404时显示的页面

    error_page 404 /404.html;

       

    后端服务器返回500等错误的时候显示的页面

    error_page 500 502 503 504 /50x.html;

      location = /50x.html {

      root html;

    }

       

    }

       

      当需要对同一端口监听多个域名时,使用如下配置,端口相同域名不同server_name也可以使用正则进行配置

      但要注意server过多需要手动扩大server_names_hash_bucket_size缓存区大小

      server {

        listen 80;

        server_name bbb.abc.com;

        charset utf-8;

        location / {

          proxy_pass http://localhost:10001;

        }

      }

      server {

        listen 80;

        server_name aaa.abc.com;

        charset utf-8;

        location / {

          proxy_pass http://localhost:20002;

        }

      }

    }

     

  • 相关阅读:
    HTML5存储
    HTML5全局属性和事件
    HTML5媒体(音频/视频)
    HTML5标签canvas制作动画
    HTML5标签canvas图像处理
    开发kendo-ui弹窗组件
    HTML5标签canvas制作平面图
    javascript匿名函数
    Javascript富文本编辑器
    快速排序算法(python版本)
  • 原文地址:https://www.cnblogs.com/liuxia912/p/11066670.html
Copyright © 2020-2023  润新知