1、静态HTTP服务器
首先,Nginx是一个HTTP服务器,可以将服务器上的静态文件(如HTML,图片)通过协议层展示给客户端,配置:
server {
listen 80;
# 端口号
location / {
root
/usr/share/nginx/html
;
# 静态文件路径
}
}
2、反向代理服务器
客户端本来可以直接通过HTTP协议访问某个网站的服务器,网站管理员可以在他们之间加一个Nginx,客户端请求Nginx,Nginx请求应用服务器,然后将结果返回给客户端,此时Nginx就是反向代理服务器。配置
server {
listen 80;
location / {
proxy_pass http:
//192
.168.20.1:8080;
# 应用服务器HTTP地址
}
}
问题:为什么要加一个反向代理,直接访问服务器不行吗?不就是多此一举?
解答:
3、负载均衡
公司越做越大的时候,网站的访问量野非常大,服务器的压力也越来越大,运行速度也随之慢了很多,一台服务器也不够用 了,于是将一个应用部署到多个服务器上,均衡的分配给请求网站的客户端,即使有一台服务器挂了,其他的也可以正常运 行,也不会影响正常的访问,Nginx可以通过反向代理实现负载均衡。配置:
upstream myapp {
server 192.168.20.1:8080;
# 应用服务器1
server 192.168.20.2:8080;
# 应用服务器2
}
server {
listen 80;
location / {
proxy_pass http:
//myapp
;
}
}
以上配置会将请求请求轮询分配到服务器上,也就是一个客户端多次请求,有可能会由多台不同的服务器处理。可以通过ip-hash的方式,根据客户断ip地址的hash值将请求分配给固定的某个服务器处理。配置:
upstream myapp {
ip_hash;
# 根据客户端IP地址Hash值将请求分配给固定的一个服务器处理
server 192.168.20.1:8080;
server 192.168.20.2:8080;
}
server {
listen 80;
location / {
proxy_pass http:
//myapp
;
}
}
另外,服务器的硬件配置可能有好有差,想把大部分的请求分配给好的服务器,把少量请求分配给差点的服务器,可以通过weight开控制的。配置:
upstream myapp {
server 192.168.20.1:8080 weight=3;
# 该服务器处理3/4请求
server 192.168.20.2:8080;
# weight默认为1,该服务器处理1/4请求
}
server {
listen 80;
location / {
proxy_pass http:
//myapp
;
}
}
4、虚拟主机
有的网站访问量大,需要负载均衡。然而并不是所有的网站都是这样的,有的网站访问量小,需要节省成本,将多个网站部署到同一台服务器上。
将2个网站部署到同一台服务器上,2个域名解析到同一个ip地址,但是客户端通过2个域名却可以打开2个完全不同的网站,互补影响,就像2台服务器一样,可以叫2个虚拟主机。配置:
有的
有的网站访问量大,需要负载均衡。然而并不是所有网站都如此出色,有的网站,由于访问量太小,需要节省成本,将多个网站部署在同一台服务器上。
例如将www.aaa.com和www.bbb.com两个网站部署在同一台服务器上,两个域名解析到同一个IP地址,但是用户通过两个域名却可以打开两个完全不同的网站,互相不影响,就像访问两个服务器一样,所以叫两个虚拟主机。
配置:
server {
listen 80 default_server;
server_name _;
return
444;
# 过滤其他域名的请求,返回444状态码
}
server {
listen 80;
server_name www.aaa.com;
# www.aaa.com域名
location / {
proxy_pass http:
//localhost
:8080;
# 对应端口号8080
}
}
server {
listen 80;
server_name www.bbb.com;
# www.bbb.com域名
location / {
proxy_pass http:
//localhost
:8081;
# 对应端口号8081
}
}
虚拟主机的原理就是通过HTTP请求头的post是否匹配server_name来实现的,
server_name配置还可以过滤有人恶意将某些域名指向你的服务器。
5、fastCGI
Nginx本身不支持PHP等语言,但是它可以通过fastCGI来将请求扔给某些语言或者框架处理。配置:
server {
listen 80;
location ~ \.php$ {
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME
/PHP
文件路径$fastcgi_script_name;
# PHP文件路径
fastcgi_pass 127.0.0.1:9000;
# PHP-FPM地址和端口号
# 另一种方式:fastcgi_pass unix:/var/run/php5-fpm.sock;
}
}
配置中将PHP结尾的请求通过FastCGI交给PHP-FPM处理,php-FPM是PHP的一个FastCGI管理器。
fastcgi_past和proxy_past的区别,如图所示:
有的
有的网站访问量大,需要负载均衡。然而并不是所有网站都如此出色,有的网站,由于访问量太小,需要节省成本,将多个网站部署在同一台服务器上。
例如将www.aaa.com和www.bbb.com两个网站部署在同一台服务器上,两个域名解析到同一个IP地址,但是用户通过两个域名却可以打开两个完全不同的网站,互相不影响,就像访问两个服务器一样,所以叫两个虚拟主机。
配置: