一、概论

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. 解决WinForm屏幕缩放适配只需修改两个Form的两个属性

    最近要做一个windows下截屏识别文字的程序,调试发现截取的图像显示不完整. 输出了Screen.PrimaryScreen.Bounds.Width获取的值,结果与实际分辨率不同,所以确定了与我的 ...

  2. Git修改已经提交的用户名信息

    由于工作或者其他原因,有时候我们会修改git的用户名和邮箱账号,没有改过来就提交,就会导致提交人信息不一致的问题.现在记录修正回来的方法 # 第一步,(n)代表提交次数 git rebase -i H ...

  3. 如何处理请求返回的二进制数据流转化成xlsx文件?

    /* fileName : 文件名 res:二进制流 */ function getOutExcel(fileName, res) { let blob = new Blob([res], { typ ...

  4. Linux之df磁盘信息

    df命令用于查看磁盘的分区,磁盘已使用的空间,剩余的空间 1.用法 df [选项] [文件..] 2.命令选项 -a,--all 全部文件系统-h,--human-readable 以以合适的单位来显 ...

  5. 2.PAT 1001 害死人不偿命的(3 n + 1 )猜想

    题目: 卡拉兹(Callatz)猜想: 对任何一个正整数 n,如果它是偶数,那么把它砍掉一半:如果它是奇数,那么把 ( 砍掉一半.这样一直反复砍下去,最后一定在某一步得到 n=1.卡拉兹在 1950 ...

  6. wkhtmltopdf 自定义字体未生效或中文乱码

    使用wkhtmltopdf控件将网页保存成pdf的过程中出现网页中有些字体,在PDF中未生效.通过网上查询结果有一种处理方式: 在网页头部的style标签中,手工指定宋体字体的本地存放位置,wkhtm ...

  7. Java 扫描微信公众号二维码,关注并自动登录网站

    https://blog.csdn.net/qq_42851002/article/details/81327770 场景:用户扫描微信公众号的二维码,关注后自动登录网站,若已关注则直接登录. 逻辑: ...

  8. Invalid argument: Key: label. Data types don't match. Data type: int64 but expected type: float

    改为

  9. C# 异步编程 (12)

    异步编程重要性 C# 5.0 提供了更强大的异步编程.添加两个新的关键字 async 和 await . 使用异步编程,方法调用是在后台运行(通常在线程或任务的帮助下),并且不会阻塞调用线程. 3种不 ...

  10. 数据结构与算法——常用排序算法及其Java实现

    冒泡排序 原理:依次比较相邻的两个数,将小数放在前面(左边),大数放在后面(右边),就像冒泡一样具体操作:第一趟,首先比较第1个和第2个数,将小数放前,大数放后.然后比较第2个数和第3个数,将小数放前 ...