nginx的安装部署以及使用

介绍html

nginx是如今互联上很是流行的高性能的 Web反向代理 服务器,也是一个 IMAP/POP3/SMTP 代理服务器。 前端

如今不少互联网应用都使用nginx来做为负载均衡的使用,再高并发的状况下,使用Nginx来代替Apache是一种很不错的选择。 nginx

   

安装c++

   

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

yum -y install make zlib zlib-devel gcc-c++ libtool openssl openssl-devel正则表达式

   

·安装PCRE· vim

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;

    }

  }

}

相关文章
相关标签/搜索