这几个问题让你全面了解Nginx

352 阅读3分钟

什么是反向代理

说反向代理我们先说说“正向代理”,比如我们想去看看外面的世界。不好意思,有一堵墙。我们就得找科学上网工具,这些工具就是正向代理,比如我们访问的是youtube,YouTube并不知道我们,只知道代理。所以正向代理的对象是客户端。

我们上国内的网站就容易多了,比如访问baidu。我只知道baidu,并不知道它后台有多少台服务器来处理我们的请求。baidu再这里扮演的就是反向代理。它的服务对象是服务器。nginx就是非常出色的反向代理服务器。

** 正向代理服务的对象是客户,反向代理服务的对象是服务器。**

Nginx 常用命令

  • 启动 nginx 。
  • 停止 nginx -s stop 或 nginx -s quit 。
  • 重载配置 ./sbin/nginx -s reload(平滑重启) 或 service nginx reload 。
  • 重载指定配置文件 .nginx -c /usr/local/nginx/conf/nginx.conf 。
  • 查看 nginx 版本 nginx -v 。
  • 检查配置文件是否正确 nginx -t 。
  • 显示帮助信息 nginx -h 。

常用的负载均衡算法。

  • 轮询+ weight
  • ip_hash //每个请求按访问 ip 的 hash 结果分配,这样每个访客固定访问一个后端服务器
  • least_conn //下一个请求将被分派到活动连接数量最少的服务器
  • least_time //请求会分配给响应最快和活跃连接数最少的backend
  • url_hash // 三方插件,每个请求按访问 ip 的 url 结果分配
  • fair //三方插件,依据页面大小和加载时间长短智能地进行负载均衡,也就是根据后端服务器的响应时间来分配请求,响应时间短的优先分配。须下载Nginx的 upstream_fair模块。

关键配置

worker_processes 8; #默认是1、建议设置为等于CPU总核心数。
  
error_log logs/error.log;//全局错误日志定义类型,[ debug | info | notice | warn | error | crit ]
#error_log logs/error.log notice;
#error_log logs/error.log info;
  
pid logs/nginx.pid;//进程文件

#工作模式与连接数上限
events
{
参考事件模型,use [ kqueue | rtsig | epoll | /dev/poll | select | poll ]; epoll模型是Linux 2.6以上版本内核中的高性能网络I/O模型,如果跑在FreeBSD上面,就用kqueue模型。
use epoll;
单个进程最大连接数(最大连接数=连接数*进程数)
worker_connections 65535;
}
  
http {
include mime.types; #文件扩展名与文件类型映射表
default_type application/octet-stream; #默认文件类型
charset utf-8; #默认编码
client_header_buffer_size 32k; #上传文件大小限制

#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; #开启高效文件传输模式,sendfile指令指定nginx是否调用sendfile函数来输出文件,对于普通应用设为 on,如果用来进行下载等应用磁盘IO重负载应用,可设置为off,以平衡磁盘与网络I/O处理速度,降低系统的负载。
#tcp_nopush #在linux/Unix系统中优化tcp数据传输,仅在sendfile开启时有效
autoindex on; #开启目录列表访问,合适下载服务器,默认关闭。
keepalive_timeout 65; #长连接超时时间,单位是秒
  
# gzip压缩功能设置
gzip on;
gzip_min_length 1k;
gzip_buffers 4 16k;
gzip_http_version 1.0;
gzip_comp_level 6;
gzip_types text/html text/plain text/css text/javascript application/json application/javascript application/x-javascript application/xml;
gzip_vary on;
  
# http_proxy 设置
client_max_body_size 10m;
client_body_buffer_size 128k;
proxy_connect_timeout 75;
proxy_send_timeout 75;
proxy_read_timeout 75;
proxy_buffer_size 4k;
proxy_buffers 4 32k;
proxy_busy_buffers_size 64k;
proxy_temp_file_write_size 64k;
proxy_temp_path /usr/local/nginx/proxy_temp 1 2;
  
# 设定负载均衡后台服务器列表
upstream httpds {
	server 192.168.3.101:80 weight=10 down max_conns=100;
	server 192.168.3.105:80 weight=2 backup;
}
* weight:默认为1.weight越大,负载的权重就越大。
* down:表示当前的server暂时不参与负载
* backup: 其它所有的非backup机器down或者忙的时候,请求backup机器。 
* max_conns 可以根据服务的好坏来设置最大连接数,防止挂掉
* max_fails、 fail_timeout # max_fails:失败多少次认为主机已挂掉则,踢出,公司资源少的话一般设置2~3次,多的话设置1次
max_fails=2 fail_timeout=20s 代表在20秒内请求某一应用失败2次,认为该应用宕机,后等待20秒,这期间内不会再把新请求发送到宕机应用,而是直接发到正常的那一台,时间到后,再有请求进来继续尝试连接宕机应用且仅尝试1次,如果还是失败,则继续等待20秒...以此循环,直到恢复。

  
# 表示一个虚拟主机
server {
listen 80; //监听端口
server_name tt.kk.com;
root /web/kk;
  
charset utf-8;
access_log logs/host.access.log main;
  
#代理
location / {
root /web/kk;
index index.jsp index.html index.htm;
  
proxy_pass http://https;

# 健康检查模块
location /status {
            check_status;
        }
}

### 配置动静分离。
location / {
		proxy_pass httpds;
        }
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|html|htm|css|js)$ {
            root  /var/data/web/;
        }

补充:开机启动nginx

chkconfig --list
chkconfig --add nginx
chkconfig nginx on

nginx高并发原理 : 多进程+epool实现高并发

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

nginx 和 Ribbon区别

nginx是服务端负载均衡:在客户端和服务端中间使用代理。 Ribbon是客户端负载均衡:根据自己的情况做负载。

nginx错误端口

502:错误网关;503:服务器超载