nginx原理和反向代理

1.1 nginx基础

https://www.cnblogs.com/xiaonq/p/10468998.html

1.1.1 什么是nginx

  • 部署web项目的容器(部署你们写的项目的),常见的web容器有:nginx、Apache、Tomcat
  • nginx官方宣称可以处理十万并发(处理静态资源的时候应该是可以达到这个水平)
  • 多进程 + 协程 + epool

1.1.2 nginx高并发原理( 多进程+epoll实现高并发 )

  • Nginx 在启动后,会有一个 master 进程和多个相互独立的 worker 进程。
  • 每个子进程只有一个线程,采用的 IO多路复用模型epoll,实现高并发。

1.2 nginx正向代理和反向代理

1.2.1 正向代理

  • 我访问不了某网站,但是我能访问一个代理服务器,这个代理服务器呢,他能访问那个我不能访问的网站
  • 于是我先连上代理服务器,告诉他我需要那个无法访问网站的内容,代理服务器去取回来,然后返回给我。
  • 客户端必须设置正向代理服务器,当然前提是要知道正向代理服务器的IP地址,还有代理程序的端口。
  • 例如之前使用过这类软件例如CCproxy,http://www.ccproxy.com/ 需要在浏览器中配置代理的地址。
  • 正向代理作用:
    • 访问原来无法访问的资源,如google
    • 可以做缓存,加速访问资源
    • 对客户端访问授权,上网进行认证
    • 代理可以记录用户访问记录(上网行为管理),对外隐藏用户信息
      在这里插入图片描述

1.2.2 nginx反向代理

  • 反向代理
    • 反向代理对用户透明,客户端无需任何配置即可访问服务。
    • 实际运行方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器。
    • 并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外就表现为一个服务器。
      在这里插入图片描述
  • docker部署nginx反向代理
[root@linux-node4 ~]# docker run -itd --name=web1 -p 192.168.56.14:81:80 nginx:latest
http://192.168.56.14:81/
[root@linux-node4 ~]# docker run -itd --name=web2 -p 192.168.56.14:82:80 nginx:latest
http://192.168.56.14:82/
        
[root@linux-node1 conf.d]# nginx -t
[root@linux-node1 conf.d]# systemctl reload nginx
  • 反向代理和web服务器区别
    • **反向代理服务器:**通过给你upstream参数配置, proxy_pass
    • **web服务器部署:**web服务服务器应该不是我们真实项目(django+uwsgi+nginx)
    • **几台反向代理服务器:**没有使用LVS等负载均衡技术,那么只有一台负载均衡服务器
    • 反向代理服务器部署nginx后台为什么也不是nginx: 提高每个web服务器处理能力

1.3 nginx配置文件

  • nginx配置文件主要就两个地方
    • /etc/nginx/nginx.conf # 主配置文件
user  nginx; 
worker_processes  1;         # 默认使用几个进程(和机器cpu数量一致)

error_log  /var/log/nginx/error.log warn;         # 存储错误日志地方
pid        /var/run/nginx.pid;                    # nginx运行进程的pid


events {
    worker_connections  1024;                     # 默认能处理多少个连接
}


http {
    include       /etc/nginx/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  /var/log/nginx/access.log  main;    # 访问日志地方

    sendfile        on;
    #tcp_nopush     on;

    keepalive_timeout  65;

    #gzip  on;

    include /etc/nginx/conf.d/*.conf;               # 指定了包含的配置文件位置
}
  • nginx第二个关键配置文件在:/etc/nginx/conf.d
upstream my1904 {
    server 192.168.56.14:81;
    server 192.168.56.14:82;
    server 192.168.56.14:83;
}
server {
    listen       9999;
    server_name  localhost;
    location / {
        proxy_pass  http://my1904;
    }
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }
}
发布了22 篇原创文章 · 获赞 3 · 访问量 832

猜你喜欢

转载自blog.csdn.net/weixin_44980838/article/details/104659623
今日推荐