Nginx 学习笔记
Nginx 概述、安装
什么是 Nginx ?
\qquad Nginx 是一款轻量级的 Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,在BSD-like 协议下发行。其特点是 占有内存少,并发能力强,事实上nginx的并发能力在同类型的网页服务器中表现较好,中国大陆使用nginx网站用户有:百度、京东、新浪、网易、腾讯、淘宝等。
Nginx 的应用场景
-
Http 服务器。Nginx 是一个 HTTP 服务器,可以独立提供 HTTP 服务,也可以做静态网页服务器
-
虚拟主机。可以实现在一台服务器虚拟出多个网站,例如个人网站使用的虚拟主机
-
反向代理,负载均衡。当网站的访问量达到一定程度之后,单台服务器不能用户的请求时,需要用多台服务器集群,配合 Nginx 做反向代理。并且多台服务器可以平均分担负载,不会因为某台服务器负载高宕机,而某台服务器闲置的情况。
Nginx 在 Linux 下的安装
环境准备
- gcc 环境
yum install gcc-c++
- 第三方的开发包 PCRE
\qquad PCRE(Perl Compatible Regular Expressions)是一个 Perl 库,包括 perl 兼容的正则表达式库。Nginx 的 http 模块使用 pcre 来解析正则表达式,所以需要在 linux 上安装 pcre库。
yum install -y pcre pcre-devel
- zlib 库
\qquad zlib 库提供了很多种压缩和解压缩的方式,Nginx 使用 zlib 对 http 包的内容进行 gzip,所以需要在 linux 上安装 zlib 库。
yum install -y zlib zlib-devel
- OpenSSL
\qquad OpenSSL 是一个强大的安全套接字层密码库,囊括主要的密码算法、常用的密钥和证书封装管理功能及 SSL 协议,并提供丰富的应用程序供测试或其它目的使用。Nginx 不仅支持 http 协议,还支持 https(即在 ssl 协议上传输 http),所以需要在 linux 安装 openssl 库。
yum install -y openssl openssl-devel
下载、编译、安装 Nginx
- 下载 Nginx
\qquad 去官网中下载 Nginx 的压缩包:http://nginx.org/en/download.html
- 上传到服务器上,并解压缩
tar -xzvf nginx-1.10.3.tar.gz
- 使用 configure 命令创建 makefile 文件
./configure \
--prefix=[安装目录: /opt/nginx/] \
--pid-path=/var/run/nginx/nginx.pid \
--lock-path=/var/lock/nginx.lock \
--error-log-path=/var/log/nginx/error.log \
--http-log-path=/var/log/nginx/access.log \
--with-http_gzip_static_module \
--http-client-body-temp-path=/var/temp/nginx/client \
--http-proxy-temp-path=/var/temp/nginx/proxy \
--http-fastcgi-temp-path=/var/temp/nginx/fastcgi \
--http-uwsgi-temp-path=/var/temp/nginx/uwsgi \
--http-scgi-temp-path=/var/temp/nginx/scgi
- 使用 make 命令编译、安装
make # 编译
make install # 安装
- Nginx 的启动与访问
注意:之前在执行 configure 命令时,指定的临时文件 /var/temp/nginx/client 还没有创建,需要先创建,否则会报错
mkdir /var/temp/nginx/client -p
- 启动、关闭 Nginx 的命令:
cd /opt/nginx/sbin # 进入 Nginx 目录下的 sbin 目录
./nginx # 启动 Nginx
./nginx -s quit # 正常退出 Nginx(退出前保存配置)
./nginx -s stop # 强制退出 Nginx
./nginx -s reload # 刷新配置文件
Nginx 功能一:部署静态资源
- 先看一下 Nginx 的配置文件 conf/nginx.conf
- 所以要想引用静态资源,只需要将 html 文件夹下的 index.html 换成自己的就行了
- 比如:换上自己的 404 页面
Nginx 功能二:虚拟主机
\qquad 在 nginx.conf 文件中,一个 server {} 就代表一个服务端:
...
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
# 服务端,可以多个配置(不同的端口、server_name)
server {
listen 80; # 端口号,默认 80
server_name localhost; # 域名或者 ip
location / { # 访问路径
root html; # 默认访问资源的目录
index index.html index.htm; # 默认访问资源名称
}
# 错误页面
error_page 404 /404.html;
error_page 500 502 503 504 /50x.html;
location = /50x.html { # 访问路径
root html;
}
}
...
}
...
端口绑定
- 在 nginx.conf 中配置多个 server,每个 server 设置不同的端口,server_name 仍然配置成 localhost,再为每个 server 配置不同的静态资源内容,就可以实现访问不同的端口号,得到不同的资源
# http://公网ip:80/ ---> html/index.html
server {
listen 80; # 端口号
server_name localhost; # 域名或者 ip
location / { # 访问路径
root html; # 默认访问资源的目录
index index.html index.htm; # 默认访问资源名称
}
# 错误页面
error_page 404 /404.html;
error_page 500 502 503 504 /50x.html;
location = /50x.html { # 访问路径
root html;
}
}
# http://公网ip:8088/ ---> bookstore/index.html
server {
listen 8088; # 端口号,默认 80
server_name localhost; # 域名或者 ip
location / { # 访问路径
root bookstore; # 默认访问资源的目录
index index.html index.htm; # 默认访问资源名称
}
# 错误页面
error_page 404 /404.html;
error_page 500 502 503 504 /50x.html;
location = /50x.html { # 访问路径
root bookstore;
}
}
域名绑定
\qquad Windows 系统通过域名来访问网站时,首先从本地的 hosts 文件中查看有没有域名对应的 ip 地址,如果没有就会去 DNS 服务器找域名与 ip 地址的对应关系。
- 所以,先在 hosts(
C:\Windows\System32\drivers\etc\hosts
) 中添加一个域名与 ip 的映射
- 然后,在 nginx.conf 中配置 server:
# ========== use cute-alien.cc visit the web
# ========== shit! A problem happened, because it need to be signed.
# ========== We can only use the domain that is not existed.
server {
listen 80;
server_name cute-alien.cc;
location / {
root html;
index index.html index.htm;
}
error_page 404 /404.html;
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
# ========== use www.cute-alien.cc visit the web
# ========== shit! A problem happened, because it need to be signed.
# ========== We can only use the domain that is not existed.
server {
listen 80;
server_name www.cute-alien.cc;
location / {
root html;
index 404.html;
}
error_page 404 /404.html;
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
- 结果(临时效果):
注意:设置的域名需要备案,不然会被截断(如果服务器是中国内地的)
Nginx 功能三:反向代理与负载均衡
反向代理
介绍
\qquad 反向代理(Reverse Proxy)方式是指以代理服务器来接受 internet 上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给 internet 上请求连接户端,此时代理服务器对就表现为一个反向代理服务器。
- 正向代理:
- 反向代理:
配置反向代理:
# 第一步:配置上升流[狗头]
upstream tomcat-blog {
# server [ip]:[port];
server 192.168.2.100:80;
server 192.168.2.101:80;
server 192.168.2.102:8080;
server 192.168.2.102:8081;
}
server {
listen 80;
# server_name [访问的域名]/ip;
server_name cute-alien.cc;
location / {
# root html; # 默认访问资源的目录
proxy_pass http://tomcat-blog;
index index.html index.htm;
}
}
负载均衡
\qquad
负载均衡建立在现有网络结构之上,它提供了一种廉价有效透明的方法,可以扩展网络设备和服务器的带宽、增加吞吐量、加强网络数据处理能力、提高网络的灵活性和可用性。
\qquad
负载均衡(Load Balance)其意思就是分摊到多个操作单元上进行执行,例如 Web 服务器、FTP 服务器、企业关键应用服务器和其它关键任务服务器等,从而共同完成工作任务。
- 在 Nginx 中可以配置 weight(权重),默认为1
# 第一步:配置上升流[狗头]
upstream tomcat-blog {
# server [ip]:[port];
server 192.168.2.100:80 weight=2;
server 192.168.2.101:80;
server 192.168.2.102:8080;
server 192.168.2.102:8081;
}
Nginx 实现动静分离
概述
\qquad Nginx 动静分离是指将动态请求与静态请求分离开,即 使用 Nginx 处理静态页面,Tomcat 处理动态页面。
\qquad
动静分离有两种实现方式:
\qquad
(1). 纯粹地把静态文件独立成单独的域名,放在独立的服务器上,也是目前主流推崇的方案
\qquad
(2). 把动态与静态文件混合在一起发布,通过 Nginx 来分开
\qquad 通过 location 指定不同的后缀名实现不同的请求转发。通过 expires 参数设置,可以使存过期时间,减少与服务器之前的请求和流量。
\qquad 具体 Expires 定义:是给一个资源设定一个过期时间,也就是说无需去服务端验证,直接通过浏览器自身确认是否过期即可,所以不会产生额外的流量。
\qquad 此种方法非常适合不经常变动的资源。(如果经常更新的文件,不建议使用 Expires 来缓存),比如这里设置 3d,表示在这 3 天之内访问这个 URL,发送一个请求,比对服务器该文件最后更新时间没有变化,则不会从服务器抓取,返回状态码 304;如果有修改,则直接从服务器重新下载,返回状态码 200。
实例
- 放置静态资源
- 修改 Nginx 的配置文件 conf/nginx.conf
-
linux 中重新加载 Nginx 的配置文件 ——
./nginx -s reload
-
在浏览器中测试