安装
在 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;
}