Linux 6 Nginx
服务器种类:
IIS:windows上的服务器
Apache:Linux上一代的高性能服务器
Nginx:Linux新一代高性能服务器
通过curl -i xxxxx.xxxx命令可以查看网络请求信息以及使用的服务器。
nginx特点:
占用的系统资源少,支持的并发数更多,还可以作为反向代理、负载均衡
一、Nginx安装配置
# 依赖库
yum install gcc patch libffi-devel python-devel zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel openssl openssl-devel -y
# 编译安装 1.下载源码包 wget -c https://nginx.org/download/nginx-1.12.0.tar.gz 2.解压缩源码 tar -zxvf nginx-1.12.0.tar.gz 3.配置,编译安装 开启nginx状态监测功能 ./configure --prefix=/opt/nginx1-12/ --with-http_ssl_module --with-http_stub_status_module make && make install 4.启动nginx,进入sbin目录,找到nginx启动命令 cd sbin ./nginx #启动 ./nginx -s stop #关闭 ./nginx -s reload #平滑重启(修改了配置文件,不重启就能加载)
二、Nginx目录结构
- conf 存放nginx所有配置文件的目录,主要nginx.conf
- html 存放nginx默认站点的目录,如index.html、error.html等
- logs 存放nginx默认日志的目录,如error.log access.log
- sbin 存放nginx主命令的目录,sbin/nginx
三、Nginx主配置文件解析
Nginx主配置文件/etc/nginx/nginx.conf
是一个纯文本类型的文件,整个配置文件是以区块的形式组织的。一般,每个区块以一对大括号{}
来表示开始与结束。
CoreModule核心模块 user www; #Nginx进程所使用的用户 worker_processes 1; #Nginx运行的work进程数量(建议与CPU数量一致或auto) error_log /log/nginx/error.log #Nginx错误日志存放路径 pid /var/run/nginx.pid #Nginx服务运行后产生的pid进程号
events事件模块 events { worker_connections //每个worker进程支持的最大连接数 use epool; //事件驱动模型, epoll默认 }
http内核模块 //公共的配置定义在http{} http { //http层开始 ... //使用Server配置网站, 每个Server{}代表一个网站(简称虚拟主机) 'server' { listen 80; //监听端口, 默认80 server_name localhost; //提供服务的域名或主机名 access_log host.access.log //访问日志 //控制网站访问路径 'location' / { root /usr/share/nginx/html; //存放网站代码路径 index index.html index.htm; //服务器返回的默认页面文件 } //指定错误代码, 统一定义错误页面, 错误代码重定向到新的Locaiton error_page 500 502 503 504 /50x.html; } ... //第二个虚拟主机配置 'server' { ... } include /etc/nginx/conf.d/*.conf; //包含/etc/nginx/conf.d/目录下所有以.conf结尾的文件 } //http层结束
四、Nginx多虚拟主机
可以在一台服务器上运行多个虚拟主机,不同的虚拟主机返回不同的页面。
#多虚拟主机的配置 1.修改nginx底下的conf/nginx.conf ,修改信息如下 server { listen 80; server_name www.s14huoying.com; location / { #指明网页根目录在/opt/html/文件夹下 root /data/huoying; index index.html index.htm; } } server { listen 80; server_name www.s14hanju.com; location / { #指明网页根目录在/opt/html/文件夹下 root /data/hanju; index index.html index.htm; } } 2.重新加载nginx配置文件 ../sbin/nginx -t #检测语法 ../sbin/nginx -s reload #平滑重启 3.准备不同的虚拟主机的站点资料 mkdir -p /data/{huoying,hanju} 放入不同的资料如下 ├── hanju │ ├── hanju.jpg │ └── index.html └── huoying ├── index.html └── mingren.jpg 4.写入到本地dns解析文件,由于我是在windows中通过浏览器访问,应该在windows的hosts文件中添加记录 hosts文件就是一个本地dns(就是将域名转化成ip地址)强制解析的文件 windows的hosts文件就在这里:C:\Windows\System32\drivers\etc\hosts ,写入如下信息 192.168.12.96 www.s14huoying.com 192.168.12.96 www.s14hanju.com 5.在windows中,测试访问多域名配置
五、Nginx状态模块
在配置文件中添加两行即可:
location /status {
stub_status on;
}
这样访问xxxxxx/status就可以查看当前的连接数量等信息。
六、Nginx访问日志
在配置文件中,打开注释,nginx.conf 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; # 保存路径 参数详解: $remote_addr 记录客户端ip $remote_user 远程用户,没有就是 “-” $time_local 对应[14/Aug/2018:18:46:52 +0800] $request 对应请求信息"GET /favicon.ico HTTP/1.1" $status 状态码 $body_bytes_sent 571字节 请求体的大小 $http_referer 对应“-” 由于是直接输入浏览器就是 - $http_user_agent 客户端身份信息 $http_x_forwarded_for 记录客户端的来源真实ip 97.64.34.118 打开了功能之后,可一通过logs/access_log查看用户身份信息 192.168.12.60 - - [06/Dec/2018:11:24:04 +0800] "GET / HTTP/1.1" 304 0 "-" "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.110 Safari/537.36" "-"
七、反向代理
正向代理的是客户端,是客户端通过代理去访问一个网站。
反向代理的是服务器,是当服务器接收到一个请求后转发给代理服务器。
server { listen 80; server_name www.s14huoying.com; location / { proxy_pass http://192.168.12.38; #请求会直接转发给http://192.168.12.38; }
八、集群和负载均衡
集群:就是用多台服务器来共同运行一个nginx,保证多用户可以同时访问,也避免一台服务器宕机导致的整个服务瘫痪。
负载均衡:就是指定多个反向代理,但是nginx会自动帮我们通过一定的算法切换不同的代理,让多个代理处理的请求数达到一个平衡。
nginx负载均衡配置 1.环境准备,准备3台服务器 192.168.12.96 nginx入口node1 192.168.12.67 应用服务器1 192.168.12.38 应用服务器2 2.关闭所有机器的防火墙 3.在node1节点上配置负载均衡配置(发牌人) 1.修改配置文件nginx.conf ,写入如下配置 #定义负载均衡池名字叫做s14django upstream s14django { #池子中存放2个服务器,默认轮询方式调度服务器 server 192.168.12.38:8000; server 192.168.12.67:8000;
# server 192.168.12.67:8000 weight=2;
# server 192.168.12.38:8000 weight=3;
# 表示这两个服务器处理请求的比例是2:3,这是按照权重调度服务器 } #root参数定义网页的根目录,可以写在虚拟主机内,局部变量 #如果写在server标签外,就是全局变量 root html; #虚拟主机1 server { listen 80; server_name www.s14huoying.com; location / { #当请求发送到www.s14huoying.com的时候,匹配到 / ,就执行以下代码 proxy_pass http://s14django; #包含语法参数,将一个配置文件添加到当前虚拟主机生效,这个文件要手动创建 #这个proxy_params文件创建在/opt/nginx1-12/conf底下 include proxy_params; } } 2.手动创建这个参数文件 touch /opt/nginx1-12/conf/proxy_params 写入信息 proxy_set_header Host $http_host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_connect_timeout 30; proxy_send_timeout 60; proxy_read_timeout 60; proxy_buffering on; proxy_buffer_size 32k; proxy_buffers 4 128k; 4.配置两台应用服务器 1.准备一个flask代码,运行 pip3 install flask 2.准备代码 myflask.py from flask import Flask app=Flask(__name__) @app.route('/') def hello(): return "<h1>我是伟华</h1>" if __name__=="__main__": app.run(host='0.0.0.0',port=8000) 3.启动应用服务器 python3 myflask.py 5.通过访问nginx负载均衡器入口,查看负载均衡 是否正常分配,默认是轮训方式 1.访问自己的nginx负载均衡的ip地址,查看结果