一、概论

1、什么是代理服务器

代理服务器,客户机在发送请求时,不会直接发送给目的主机,而是先发送给代理服务器,代理服务接受客户机请求之后,再向主机发出,并接收目的主机返回的数据,存放在代理服务器的硬盘中,再发送给客户机。

2、为什么要使用代理服务器

1)提高访问速度

由于目标主机返回的数据会存放在代理服务器的硬盘中,因此下一次客户再访问相同的站点数据时,会直接从代理服务器的硬盘中读取,起到了缓存的作用,尤其对于热门站点能明显提高请求速度。

2)防火墙作用

由于所有的客户机请求都必须通过代理服务器访问远程站点,因此可在代理服务器上设限,过滤某些不安全信息。

3)通过代理服务器访问不能访问的目标站点

互联网上有许多开发的代理服务器,客户机在访问受限时,可通过不受限的代理服务器访问目标站点,通俗说,我们使用的翻墙浏览器就是利用了代理服务器,虽然不能出国,但也可直接访问外网。

二、反向代理 VS 正向代理
1、什么是正向代理?什么是反向代理?

正向代理,架设在客户机与目标主机之间,只用于代理内部网络对Internet的连接请求,客户机必须指定代理服务器,并将本来要直接发送到Web服务器上的http请求发送到代理服务器中。

反向代理服务器架设在服务器端,通过缓冲经常被请求的页面来缓解服务器的工作量,将客户机请求转发给内部网络上的目标服务器;并将从服务器上得到的结果返回给Internet上请求连接的客户端,此时代理服务器与目标主机一起对外表现为一个服务器。

2、反向代理有哪些主要应用?

现在许多大型web网站都用到反向代理。

  1.可以防止外网对内网服务器的恶性攻击.

  2.缓存以减少服务器的压力:比如对于不经常变更的图片(nginx 利用expires来让客户端缓存数据)

                    

  3.可以进行负载均衡,将用户请求分配给多个服务器.

2. Nginx 安装

2.1 安装编译工具及库文件

yum -y install gcc zlib zlib-devel pcre-devel openssl openssl-devel

2.2 //创建一个文件夹

cd /usr/local
mkdir nginx
cd nginx

32.3 下载tar包

wget http://nginx.org/download/nginx-1.13.7.tar.gz

2.4  解压

tar -xvf nginx-1.13.7.tar.g

2.5  进入nginx文件夹

//执行命令
./configure
make
make install

注意看下面的截图,标红的地址就是ngin安装的目录

2.6  //进入nginx装目录(就是上面图片中标红的地址,千万不要和nginx解压目录搞混了)

cd /usr/local/nginx

2.7 nginx api( cd sbin)

启动  ./nginx     停止.   /nginx stop     重启 .  /ngnix --s reload

2.8 查看nginx是否启动成功

curl 127.0.0.1:80

3. nginx服务代理后访问出错 403 forbidden 的解决办法

前在配置nginx时遇到的这个问题最终得以解决   所以贴出解决的办法

机器是conterOS 7.3的版本

我的静态文件和js 放在 roo/weixin/web  下

出现这种情况的原因我一共使用到三个方法

原因1   是因为要访问的文件所属者不属于nginx   到文件存储目录输入命令: chown nginx:nginx  file   更改文件的所有者

原因2   是因为文件没有可读可写权限  到文件存储目录 输入命令: chmod -R  777 file  更改文件的读写权限   -R代表递归该目录下所有文件

原因3   nginx.conf配置文件 user选项所对应的是默认的用户名或者是nginx (也是权限不够高) 改成root即可

4. nginx 的nginx.conf 详解

  4.1.1 下面是nginx.conf 的配置详细解释            

#任何用户都能访问
#user nobody;
#开启进程数 <=CPU数 
worker_processes 1;

#错误日志保存位置
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;

#进程号保存文件
#pid logs/nginx.pid;

#每个进程最大连接数(最大连接=连接数x进程数)每个worker允许同时产生多少个链接,默认1024
events {
worker_connections 1024;
}

http {
#文件扩展名与文件类型映射表
include 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 logs/access.log main;

#打开发送文件
sendfile on;
#tcp_nopush on;

#keepalive_timeout 0;
#连接超时时间
keepalive_timeout 65;

#打开gzip压缩
#gzip on;

#设定请求缓冲
#client_header_buffer_size 1k;
#large_client_header_buffers 4 4k;

#设定负载均衡的服务器列表
#upstream myproject {
#weigth参数表示权值,权值越高被分配到的几率越大
#max_fails 当有#max_fails个请求失败,就表示后端的服务器不可用,默认为1,将其设置为0可以关闭检查
#fail_timeout 在以后的#fail_timeout时间内nginx不会再把请求发往已检查出标记为不可用的服务器
#}

#webapp 设定负载均衡的服务器列表(需要在loaction中调用)
upstream myapp {
server 48.102.102.102:9999 weight=1 max_fails=2 fail_timeout=30s;
server 34.68.1.172:8888 weight=1 max_fails=2 fail_timeout=30s;
}

#虚拟主机配置: 这个server 主要是说明nginx 怎么通过 反向代理找到nginx 下的静态文件的(把项目的静态文件放大nginx 对应目录中)
server {
#监听端口
listen 1234;
#监听域名
server loveliuqianqian.top;
#配置访问日志(注意建对应的文件夹)
access_log logs/bhz.com.access.log main;
#location 后面的表达式就是监听项目的路由

#正则表达式匹配uri方式:在/usr/local/nginx/bhz.com下 建立一个test123.html 然后使用正则匹配(可以设置白名单和黑名单)
#location ~ test {
## 重写语法:if return (条件 = ~ ~*)
#if ($remote_addr = 192.168.1.200) {
# return 401;
#}
#对于浏览器的过滤
#if ($http_user_agent ~* firefox) {
# rewrite ^.*$ /firefox.html;
# break;
#}
#返回根路径地址(相对路径:root = /usr/local/nginx/)
root bhz.com;
index index.html;
}

#location /goods {
#就是进行了二次跳转,比如输入:loveliuqianqian.top:1234/goods1.html 符合要求,
#然后访问的变成了loveliuqianqian.top:1234/goods-ctrl.html 所以我们访问的静态页面变成了goods-ctrl.html
# rewrite "goods-(\d{1,5})\.html" /goods-ctrl.html;
# root bhz.com;
# index index.html;
#}
}

#虚拟主机配置: 这个server 主要是说明怎么反向代理到某个tomcate 和负载均衡到多个tomcat

#配置虚拟主机,基于域名、ip和端口
server {
#监听端口
listen 80;
#监听域名
server_name loveliuqianqian.top;

#charset koi8-r;

#nginx访问日志放在logs/host.access.log下,并且使用main格式(还可以自定义格式,main 在配置文件的最上面写的有)
#access_log logs/host.access.log main;

#配置反向代理tomcat服务器:拦截.jsp结尾的请求转向到tomcat
#location ~ \.jsp$ {
# proxy_pass http://192.168.1.171:8080;
#}

#返回的相应文件地址
location ~ \.jsp${
#设置客户端真实ip地址(反正header 中,key 就是X-real-ip)
#proxy_set_header X-real-ip $remote_addr;
#负载均衡反向代理 myapp 在上面有指定
#proxy_pass http://myapp;
#如何我们不把项目的静态文件放到nginx中,只单纯的使用反向代理和负载均衡的情况下,那么 下面的路径根本就不用配了。
#返回根路径地址(相对
路径:相对于/usr/local/nginx/)
root html;
#默认访问文件
index index.html index.htm;
}
#错误页面及其返回地址
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}}
}

  对于nginx 配置文件的总结,不管你要配置反向代理还是要配置负载均衡,首先你要配置一个虚拟主机server{},

 然后通过域名和端口+location (http://aaa:8888/)后面配置的路由匹配规则,来定位nginx要拦截的路径

  1. 配置反向代理

  然后在配置反向代理的服务器,就是在localtion 中配置

 proxy_pass http://47.XXX.XXX.XXX:8185; 然后我们访问http://aaa:8888/  就可以通过nginx 访问的http://47.XXX.XXX.XXX:8185。

  2 . 配置负载均衡 (配置其实和反向代理差不多)

  首先在http标签和server{} 配置要代理的多个服务器

upstream myapp {
server 47.102.102.102:8181 weight=1 max_fails=2 fail_timeout=30s;
server 47.102.102.102:8185 weight=1 max_fails=2 fail_timeout=30s;
}

然后在localtion 中配置  proxy_pass http://myapp;  然后负载均衡就配置好了。 重启nginx 就行了

在补一句哈,如果nignx 中日志信息太多,我们可以通过linux 的定时任务,crontab -e  加上脚本 进行日志 迁移。 

    

nginx详解(代理服务器的解释+nginx 在linux 下的安装+nginx.conf 中的配置解释)的更多相关文章

  1. linux下编译安装nginx

    1.首先下载稳定版nginx1.10.2 使用wget命令下载 wget http://nginx.org/download/nginx-1.10.2.tar.gz 2.然后解压 tar -zxvf  ...

  2. Nginx总结(一)Linux下如何安装Nginx

    以前写过一些Nginx的文章,但都是用到什么说什么,没有一个完整系统的总结.趁最近有时间,打算将Nginx相关的内容重新整理一下.nginx系列文章地址如下:https://www.cnblogs.c ...

  3. centos/linux下的安装Nginx

    1.安装gcc编译器 先查看gcc编译器是否安装 在shell控制台输入gcc-v 如果没有安装请看下一步 使用yuma安装gcc yum intsall gcc 看到如下视图则说明安装成功 2.安装 ...

  4. Linux下如何安装Nginx

    看这就够了 https://segmentfault.com/a/1190000012435644 注意如果是远程浏览器访问是否启动了nginx,出现无法访问 服务器能够启动.访问不了页面 很大可能是 ...

  5. Linux下编译安装nginx并且监控

    一.安装Nginx 使用源码编译安装,包括具体的编译参数信息. 正式开始前,编译环境gcc g++ 开发库之类的需要提前装好. 安装make: yum -y install gcc automake ...

  6. linux命令详解之useradd命令使用方法[linux下 添加用户、删除用户、修改用户密码、用户组管理]

    http://www.jb51.net/article/45848.htm Linux 系统是一个多用户多任务的分时操作系统,任何一个要使用系统资源的用户,都必须首先向系统管理员申请一个账号,然后以这 ...

  7. Web服务器之Nginx详解(理论部分)

    大纲 一.前言 二.Web服务器提供服务的方式 三.多进程.多线程.异步模式的对比 四.Web 服务请求过程 五.Linux I/O 模型 六.Linux I/O 模型具体说明 七.Linux I/O ...

  8. Nginx详解(正向代理、反向代理、负载均衡原理)

    Nginx配置详解 nginx概述 nginx是一款自由的.开源的.高性能的HTTP服务器和反向代理服务器:同时也是一个IMAP.POP3.SMTP代理服务器:nginx可以作为一个HTTP服务器进行 ...

  9. 【转】Web服务器之Nginx详解(理论部分)

    大纲 一.前言 二.Web服务器提供服务的方式 三.多进程.多线程.异步模式的对比 四.Web 服务请求过程 五.Linux I/O 模型 六.Linux I/O 模型具体说明 七.Linux I/O ...

随机推荐

  1. 16.SpringMVC核心技术-文件上传

    上传单个文件 1.定义具有文件上传功能的页面 index.jsp,其表单的设置需要注意,method 属性为 POST, enctype 属性为 multipart/form-data.另外,需要注意 ...

  2. 如何创建一个前端 React 组件并发布到 NPM

    首先npm文档摆在这里: https://www.npmjs.cn/ 参考组件 https://github.com/rakuten-rex/rex-dropdownhttps://www.npmjs ...

  3. Java BIO、NIO、AIO 基础,应用场景

    Java对BIO.NIO.AIO的支持: Java BIO : 同步并阻塞,服务器实现模式为一个连接一个线程,即客户端有连接请求时服务器端就需要启动一个线程进行处理,如果这个连接不做任何事情会造成不必 ...

  4. 了解jQuery的detach()和remove()

    jQuery中提供了两种移出一个DOM元素的方法detach()和remove(),虽然是一样的功能,但是给出两种方法,必然有它的不同之处. empty() 单独说一下 ,它删除当前元素的所有子元素, ...

  5. 去掉行尾的^M

    1. 处理掉行尾的^M 在windos下进行linux内核驱动编写,调试成功后需要集成到内核代码中去,所以会通过虚拟机共享文件夹拷贝到内核对应目录,这时候看源码文件还是没有异常的. 当对该文件进行回车 ...

  6. python文件操作:字符编码与文件处理

    一.字符编码 二.文件处理 一.字符编码 储备知识点: 1. 计算机系统分为三层: 应用程序 操作系统 计算机硬件 2. 运行python程序的三个步骤 1. 先启动python解释器 2. 再将py ...

  7. Beep调用系统声音

    using System.Runtime.InteropServices; 引用命名空间 [DllImport("kernel32.dll")]public   static   ...

  8. BZOJ 3895 3895: 取石子 / Luogu SP9934 ALICE - Alice and Bob (博弈 记忆化搜索)

    转自PoPoQQQ大佬博客 题目大意:给定n堆石子,两人轮流操作,每个人可以合并两堆石子或拿走一个石子,不能操作者输,问是否先手必胜 直接想很难搞,我们不妨来考虑一个特殊情况 假设每堆石子的数量都&g ...

  9. POJ2182 Lost Cows 树状数组

    题意:有编号1~n乱序排列的奶牛,给出了每一个奶牛前小于自己编号的奶牛数目 维护一个树状数组,下标是编号,值为$0/1$标识是否存在,很显然最后一个牛的编号是知道的,我们在树状数组上二分出前缀和为小于 ...

  10. Visual Studio 2019 激活

    Visual Studio 2019 Enterprise 企业版:BF8Y8-GN2QH-T84XB-QVY3B-RC4DF Visual Studio 2019 Professional 专业版: ...