什么是Nginx?

Nginx是一款自由的、开源的、高性能的HTTP服务器和反向代理服务器;同时也是一个IMAP、POP3、SMTP代理服务器;Nginx可以作为一个HTTP服务器进行网站的发布处理,另外nginx可以作为反向代理进行负载均衡;支持高并发,并且消耗资源非常低,运行非常稳定。

由于nginx的优点,促使它快速成为使用广泛的http服务器,这里主要介绍一下nginx的使用及配置(ubuntu下)。

安装

1
sudo apt install nginx

nginx安装完后,默认时启动的,可以通过:

1
ps -aux | grep nginx

来查看nginx是否启动。如果是下面这种情况即是启动:

1
2
3
4
5
6
root       881  0.0  0.0 140620  1512 ?        Ss   20:12   0:00 nginx: master process /usr/sbin/nginx -g daemon on; master_process on;
www-data   882  0.0  0.0 143240  6252 ?       S    20:12   0:00 nginx: worker process
www-data   883  0.0  0.0 143240  6252 ?       S    20:12   0:00 nginx: worker process
www-data   884  0.0  0.0 143240  6252 ?       S    20:12   0:00 nginx: worker process
www-data   885  0.0  0.0 143240  6252 ?       S    20:12   0:00 nginx: worker process
mistack+  5146  0.0  0.0  21536  1088 pts/0   S+   20:53   0:00 grep --color=auto nginx

如果没有启动,可通过下面命令来启动,已启动可重启、或停止:

1
2
3
sudo /etc/init.d/nginx start    # 启动
sudo /etc/init.d/nginx restart    # 重启
sudo /etc/init.d/nginx stop    # 停止

打开浏览器,访问localhost,可以看到如下内容:

即nginx安装并启动成功。

配置

nginx默认配置文件在 /etc/nginx/conf.d/default.conf。我们可以删除默认配置文件在该文件夹下新建一个 nginx.conf 的配置文件。由于nginx支持的功能很多,我们逐一配置,皆存放在nginx.conf中。每次更改了配置信息,需要重新启动nginx服务器才能生效。

静态http服务器

ngin可以将服务器上的静态文件,通过http协议展现给客户端浏览器:

1
2
3
4
5
6
server {
  listen    80;    # 监听端口
  location / {
      root /usr/share/nginx/html;    # 静态文件路径,也是默认路径
  }
}

反向代理服务器

nginx可以实现反向代理,客户端可以访问nginx,然后由nginx去访问web服务器,把服务器返回的数据再返回给客户端。

1
2
3
4
5
6
server {
listen 80; # 监听端口
location / {
proxy_pass http://192.168.0.100:8000; # 应用服务器HTTP地址
}
}

负载均衡

当一个网站有很多访问量时,一台服务器往往会压力过大,容易崩溃;为了解决这个问题,nginx提供了负载均衡—-即配置多个相同的服务器分担压力,一旦其中一个挂掉,页不会影响用户的访问。

1
2
3
4
5
6
7
8
9
10
11
upstream app {
  server    192.168.0.100:8000;    # 服务器1
  server    192.168.0.200:8000;    # 服务器2
  server    192.168.0.250:8000;    # 服务器3
}
server {
  listen    80;
  location / {
      proxy_pass http://app;
  }
}

虚拟主机

有的网站,访问量不多,而要节约成本,需要将多个网站部署到同一台服务器上。这种技术叫做虚拟主机。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
server {
  listen    80;
  server_name   www.aaa.com;    # www.aaa.com域名
  location / {
      proxy_pass http://localhost:8000;
  }
}
server {
  listen    80;
  server_name   www.bbb.com;    # www.bbb.com域名
  location / {
      proxy_pass http://localhost:8001;
  }
}

uwsgi

nginx本身不支持动态网页,但是它可以通过uwsgi来将请求扔给某些语言或框架处理(例如:PHP/Python/Perl等)

1
2
3
4
5
6
7
8
9
10
11
12
13
upstream  app {
  server localhost:5000;
}
server {
  listen    80;
  server_name    127.0.0.1;
   
  location / {
      include uwsgi_params;
      uwsgi_read_timeout    3600;
      uwsgi_pass   app;
  }
}

更多配置信息请见 Nginx中文文档