安装

在 Ubuntu 下可以通过 apt-get 安装:

sudo apt-get install nginx

安装完成后 nginx 会自动启动,这时候可以通过浏览器访问 80 端口。不出意外的话,就可以看到「Welcome to nginx!」的提示信息。

启动、关闭与重载配置

执行 nginx 命令可以直接启动 ngxin。如果 nginx 已经在运行,那么可能会出现端绑定错误提示。或者,nginx 默认的 80 端口被别的程序占用,那么也会出现这个错误。

在 nginx 已经在运行的情况下,可以通过 -s 参数对 nginx 进行控制:

nginx -s signal

执行 nginx -s quit 或者 nginx -s stop 关闭 ngxin 服务。其中 quit 和 stop 的区别在于:quit 是平滑关闭,它会等待工作进程完成当前的请求之后再关闭进程,而 stop 则是强制关闭。

在对 nginx 的配置文件进行修改之后,需要执行 nginx -s reload 命令来充值配置文件,使修改生效。

配置

nginx 默认的配置文件是 /etc/nginx/nginx.conf。在这个文件中我们可以对 nginx 进行各种参数的配置。

这个文件里有 include /etc/nginx/sites-enabled/*; 这样一句话。这说明在这里加载了额外的配置文件。在 sites-enable 文件夹里只有一个 default 文件。它其实是一个软链接,指向了 /etc/nginx/sites-available/default。default 去掉无关信息之后的如下:

# Default server configuration
#
server {
	listen 80 default_server;
	listen [::]:80 default_server;

	root /var/www/html;

	index index.html index.htm index.nginx-debian.html;

	server_name _;
	location / {
		# First attempt to serve request as file, then
		# as directory, then fall back to displaying a 404.
		try_files $uri $uri/ =404;
	}

}

这里定义了一个默认的 nginx 服务,绑定了 80 端口。当我们通过 80 端口访问这台主机的时候,nginx 将会把 /var/www/html 目录下的静态资源内容呈现给我们。我们在安装完成之后访问的「Welcome to nginx!」就是来自这里。

我们还注意到在绑定端口之后有 default_server,这说明这是个默认的服务,当请求消息到达这个端口,没有其他 server 声明处理的话将会默认调用这个 server。

在 default 文件的最后还有一个普通的 server 模板:

# Virtual Host configuration for example.com
#
# You can move that to a different file under sites-available/ and symlink that
# to sites-enabled/ to enable it.
#
#server {
#	listen 80;
#	listen [::]:80;
#
#	server_name example.com;
#
#	root /var/www/example.com;
#	index index.html;
#
#	location / {
#		try_files $uri $uri/ =404;
#	}
#}

我们可以把这段配置去掉注释后拷贝到一个新的配置文件里,放到 sites-available 目录下。当我们想启用这个配置的时候,可以在 sites-enabled 目录下创建一个指向这个文件的软链接,然后 reload 就行了。

server_name 顾名思义就是这个 server 的名字,nginx 就是通过请求中的 host 来匹配对于名字的 server。比如说我们有 a.com 和 b.com 两个域名同时解析到这台机器上,那如何实现访问不同的域名呈现不同的网页呢?答案就是通过配置两个名字分别为 a.com 和 b.com 的 server。那么当我们访问对应的域名的时候,就会被转发到对应的server 去处理。

上面的例子只是实现了普通的静态文件转发,那么当我们希望把请求转发到一台服务器的某个端口上,就需要用到 nginx 的代理功能了。比如说我们希望把请求转发到 http://localhost:8080 ,那么我们就应该这样配置 location

location / {
        proxy_pass http://localhost:8080;
    }

参考资料