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;
}
}