介绍

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 -t /usr/local/webserver/nginx/conf/nginx.conf

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

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;

    }

  }

}

nginx的安装部署以及使用的更多相关文章

  1. Nginx详细安装部署教程

    一.Nginx简介 Nginx是一个web服务器也可以用来做负载均衡及反向代理使用,目前使用最多的就是负载均衡,具体简介我就不介绍了百度一下有很多,下面直接进入安装步骤 二.Nginx安装 1.下载N ...

  2. Nginx 详细安装部署教程

    一.Nginx简介 Nginx是一个web服务器也可以用来做负载均衡及反向代理使用,目前使用最多的就是负载均衡,具体简介我就不介绍了百度一下有很多,下面直接进入安装步骤 二.Nginx安装 1.下载N ...

  3. Nginx详细安装部署教程(转)

    一.Nginx简介 Nginx是一个web服务器也可以用来做负载均衡及反向代理使用,目前使用最多的就是负载均衡,具体简介我就不介绍了百度一下有很多,下面直接进入安装步骤 二.Nginx安装 1.下载N ...

  4. fastdfs+nginx的安装部署

    原理图: fastdfs适用场景: fastdfs特别适合海量 中小文件(建议范围:4KB< file_size <500MB)为载体的在线服务. 安装系统介绍: CentOS6.6 安装 ...

  5. Nginx编译安装及常用命令

    一个执着于技术的公众号 前言 前面我们已经了解Nginx基础入门知识,今天就带大家一起学习下Nginx编译安装部署 准备工作 一台linux机器(本次实验以CentOS 7.5为例) 到Nginx官方 ...

  6. 基于Containerd安装部署高可用Kubernetes集群

    转载自:https://blog.weiyigeek.top/2021/7-30-623.html 简述 Kubernetes(后续简称k8s)是 Google(2014年6月) 开源的一个容器编排引 ...

  7. nginx 安装部署

    1. 安装passenger:sudo gem install passenger 2. 找到passenger的安装目录,一般是 cd  /var/lib/gems/2.0.0/gems/passe ...

  8. Nginx安装部署与测试

    场景:项目需要部署在生产环境中,这些新的工具都需要在生产环境中去实践练习.有时间再部署一套ELK的日志分析系统,这样的系统才算具有一定的应用价值. 1 Nginx安装 用root用户安装,采用源代码编 ...

  9. Nginx Windows详细安装部署教程

    一.Nginx简介 Nginx (engine x) 是一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP服务器.Nginx是由伊戈尔·赛索耶夫为俄罗斯访问量第二的Ramble ...

随机推荐

  1. js【面向过程编程】、好、 【init()、 GetData()、 bindData()、bindDom、 bindEvent()、buyProduct()、AddProductToCart()】*****************

    1. 一般页面开发方式 [可读性差.可维护性差]------初级开发工程师 一般页面编写方法 var name = 'iphone8' var description = '手机中的战斗机 ' var ...

  2. java线程异常处理方法

    工作中常发现有些程序发生异常但却没有错误日志,原因就是一些开发线程异常处理错误,导致程序报错但异常信息打印到堆栈上,不好在生产环境中定位问题. 在java多线程程序中,所有线程都不允许抛出未捕获的ch ...

  3. PCB genesis自制孔点 Font字体实现方法

    一.先看genesis原有Font字体 在PCB工程CAM加孔点字体要求时,通常我们直接用Geneis软件给我们提供了2种孔点字体canned_57与canned_67,但此字体可能不能满足各个工厂个 ...

  4. codevs1154能量项链(环形dp,区间dp)

    1154 能量项链 2006年NOIP全国联赛提高组  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 黄金 Gold     题目描述 Description 在Mars星球上 ...

  5. 常见的Java Script内存泄露原因及解决方案

    前言 内存泄漏指由于疏忽或错误造成程序未能释放已经不再使用的内存.内存泄漏并非指内存在物理上的消失,而是应用程序分配某段内存后,由于设计错误,导致在释放该段内存之前就失去了对该段内存的控制,从而造成了 ...

  6. sql 查询出当天记录数据

    select updatetime,NewComment,HistoryID,sum(1) over(partition by UpdateTime) from LPProjectHistoryord ...

  7. 基于ASP.Net Core开发一套通用后台框架记录-(项目的搭建)

    写在前面 本系列博客是本人在学习的过程中搭建学习的记录,如果对你有所帮助那再好不过.如果您有发现错误,请告知我,我会第一时间修改. 前期我不会公开源码,我想是一点点敲代码,不然复制.粘贴那就没意思了. ...

  8. 题解报告:hdu 1285 确定比赛名次

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1285 Problem Description 有N个比赛队(1<=N<=500),编号依次 ...

  9. ANDROID 开发之 SQLite

    SQLite简介 Google为Andriod的较大的数据处理提供了SQLite,他在数据存储.管理.维护等各方面都相当出色,功能也非常的强大.SQLite具备下列特点: 1.轻量级 使用 SQLit ...

  10. 【LeetCode】-- 260. Single Number III

    问题描述: https://leetcode.com/problems/single-number-iii/ 在一个数组里面,只有两个元素仅出现过1次,其余都出现过两次.找出出现仅一次的那两个(a, ...