Nginx的正向与反向代理

张裕  金牌会员 | 2024-10-16 03:20:49 | 显示全部楼层 | 阅读模式
打印 上一主题 下一主题

主题 577|帖子 577|积分 1731

一、Nginx简介

1. 什么是Nginx

Nginx(发音为“engine-x”)是一个高性能的HTTP和反向代理服务器,同时也是一个IMAP/POP3/SMTP代理服务器。Nginx是由俄罗斯的Igor Sysoev(伊戈尔·赛索耶夫)为解决C10k问题(即同时处理超过10000个客户端毗连)而开发的。它以高性能、稳定性、功能丰富和低资源斲丧而闻名。它第一个公开版本0.1.0发布于2004年10月4日。2011年6月1日,nginx 1.0.4发布。
2. Nginx优点

1)高性能:Nginx能够处理大量的并发毗连,且内存斲丧相对较低。
2)高稳定性:Nginx以其稳定性而著称,极少出现崩溃的环境。
3)模块化:Nginx支持模块化设计,可以根据须要加载或卸载特定的模块。
4)配置简单:Nginx的配置文件简便明了,易于理解和维护。
5)跨平台:Nginx可以在多种利用系统上运行,包括Linux、BSD、Mac OS和Windows。
二、正向代理

正向代理(代理客户端),例子:VPN、游戏加速器、公司网络
正向代理通常用于客户端,在客户端配置代理服务器进行指定网站访问,由代理服务器转发请求,返回给客户端,好比国内无法访问谷歌,这个时间我们就可以设置正向代理来访问

正向代理紧张作用

1)访问控制:代理服务器可以控制客户端可以访问哪些网站或服务。
2) 缓存:代理服务器可以缓存请求的效果,提高访问速度。
3)隐私保护:代理服务器可以隐藏客户端的真实IP地点,提供一定水平的匿名性。
4)过滤:代理服务器可以过滤请求和响应,比方屏蔽广告或不得当的内容。
Nginx在正向代理中的配置示例:

  1. ...
  2. server {
  3.     resolver 8.8.8.8;#指定DNS服务器IP地址
  4.     listen 80;#监听80端口
  5.     server_name localhost;
  6.     # 正向代理转发http请求
  7.     location / {
  8.         proxy_pass http://$http_host$request_uri;
  9.         proxy_set_header HOST $host;
  10.         proxy_buffers 256 4k;
  11.         proxy_max_temp_file_size 0k;
  12.         proxy_send_timeout 30;
  13.         proxy_read_timeout 60;
  14.     }
  15. }
  16. ...
复制代码
  注意:nginx官方并不支持直接转发https请求,nginx支持https须要ngx_http_proxy_connect_module模块
  三、反向代理

反向代理(代理服务端),例子:访问百度网址
反向代理是服务端,客户端不须要知道目标服务器的地点,反向代理服务器和目标服务器对外就是一个服务器,暴露的是代理服务器的地点,隐藏了真实服务器的IP地点

反向代理的紧张作用

1)负载均衡:反向代理可以将请求通过负载均衡算法分发到多个后端服务器,均衡负载。
2)缓存:反向代理可以缓存静态内容,减轻后端服务器的负担。
3)SSL加密:反向代理可以管理SSL/TLS加密和证书,简化后端服务器的配置。
4)压缩:反向代理可以对响应进行压缩,提高传输效率。
5)安全:反向代理可以作为额外的安全层,隐藏目标服务器的身份,从而保证内网安全。
Nginx在反向代理中的应用配置示例:

  1. server {
  2.         listen       80;
  3.         server_name  localhost;
  4.         location / {
  5.             proxy_pass http://127.0.0.1:8080;
  6.             proxy_set_header Host $host;
  7.             proxy_set_header X-Real-IP $remote_addr;
  8.             proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  9.         }
  10.     }
复制代码
  proxy_pass http://127.0.0.1:8080; 将所有请求转发到本地的8080端口。
proxy_set_header 指令用于确保后端服务器收到正确的客户端请求信息。
  附:Nginx配置文件说明

nginx的配置文件结构如下:
  1. worker_processes  1;
  2. events {
  3.     worker_connections  1024;
  4. }
  5. http {
  6.     include       mime.types;
  7.     default_type  application/octet-stream;
  8.     sendfile        on;
  9.     keepalive_timeout  65;
  10.     server {
  11.         listen       80;
  12.         server_name  localhost;
  13.         location / {
  14.             root   html;
  15.             index  index.html index.htm;
  16.         }
  17.         error_page   500 502 503 504  /50x.html;
  18.         location = /50x.html {
  19.             root   html;
  20.         }
  21.     }
  22. }
复制代码
通常包含以下几部分:
  1. 全局块        
  2. ├── events  
  3. ├── http   
  4. │   ├── upstream
  5. │   ├── server   
  6. │   ├── server
  7. │   │   ├── location
  8. │   │   ├── location
  9. │   │   └── ...
  10. │   └── ...
  11. └── ...
复制代码
全局块:

全局配置,影响nginx的团体举动,比方定义运行nginx进程的用户(组)、允许打开的文件数、日志文件位置等。好比:
  1. # 全局块
  2. user  nginx;
  3. # Nginx 进程的数量
  4. worker_processes  1;
  5. # 定义 PID 文件位置
  6. pid        /var/run/nginx.pid;
  7. # 定义错误日志文件位置
  8. error_log  /var/log/nginx/error.log warn;
  9. # 定义访问日志文件位置
  10. access_log  /var/log/nginx/access.log  main;
复制代码
events块:

配置与客户端毗连的相关参数,如工作毗连数、事件处理机制等。
  1. # events 块
  2. events {
  3.     worker_connections  1024;
  4. }
复制代码
http块:

定义了所有http服务器的配置指令,包括文件引用、日志定义、http头部信息、MIME-TYPE定义、SSL配置、客户端请求头处理等。
  1. # http 块
  2. http {
  3.     include       /etc/nginx/mime.types;
  4.     default_type  application/octet-stream;
  5.     # 定义日志格式
  6.     log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
  7.                       '$status $body_bytes_sent "$http_referer" '
  8.                       '"$http_user_agent" "$http_x_forwarded_for"';
  9.     # 定义访问日志
  10.     access_log  /var/log/nginx/access.log  main;
  11.     # 定义 sendfile
  12.     sendfile        on;
  13.     # 定义 keepalive 超时时间
  14.     keepalive_timeout  65;
  15.     # 包含其他配置文件
  16.     include /etc/nginx/conf.d/*.conf;
  17.     include /etc/nginx/sites-enabled/*;
  18.     # server 块
  19.     server {
  20.         listen       80;
  21.         server_name  localhost;
  22.         # 定义 location 块
  23.         location / {
  24.             root   /usr/share/nginx/html;
  25.             index  index.html index.htm;
  26.         }
  27.         # 定义 error_page
  28.         error_page   500 502 503 504  /50x.html;
  29.         location = /50x.html {
  30.             root   /usr/share/nginx/html;
  31.         }
  32.         # 定义 upstream 块
  33.         upstream backend {
  34.             server backend1.example.com;
  35.             server backend2.example.com;
  36.         }
  37.         # 定义 map 块
  38.         map $http_host $backend_pool {
  39.             backend1.example.com backend1;
  40.             backend2.example.com backend2;
  41.             default              backend1;
  42.         }
  43.         # 使用 upstream
  44.         location /backend {
  45.             proxy_pass http://$backend_pool;
  46.         }
  47.     }
  48. }
复制代码
server块:

http 块可以包含多个 server 块,每个 server 块定义了一个虚拟主机。server块定义了服务器级别的配置指令,可以有多个server块,每个块定义了一个虚拟主机。server块可以继承http块的配置。server 块中的配置对特定的虚拟主机有效。server 块可以包含多个 location 块。
location块:

定义了请求的路由和处理方式,用于匹配请求的URI,并定义如那边理匹配的请求
upsteam块:

定义了一组后端服务器,用于负载均衡。upstream块中的配置对特定后端服务器有效。
map块:

可以基于某些请求设置变量的值,map块中的配置对整个nginx服务有效。
include指令:

用于包含其他配置文件。include指令可以出如今全局块、http块或server块中,用于引入其他配置文件。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

张裕

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表