Nginx服务器安装配置教程

Nginx 是目前最流行的 Web 服务器软件,没有之一。它不仅配置灵活,性能也不错,能够轻松支撑高并发访问。本节简单介绍一下如何在 Linux 服务器上安装、配置 Nginx 服务器。

安装

不同 Linux 发行版,程序包安装工具略有不同。在 Ubuntu 下,可以执行 apt 命名进行安装:

1
$ apt install nginx

服务启停

Nginx 安装好后,可能还没启动。我们可以执行 service 命令查看运行状态:

1
2
$ service nginx status
 * nginx is not running

如果 Nginx 没有启动,可以执行 start 子命令将其开起来:

1
$ service nginx start

Nginx 启动成功后,我们就可以用浏览器来访问它。打开浏览器输入 localhost ,可以看到:

这是 Nginx 默认配置提供的欢迎页,想要部署自己的站点,还得对它进行配置,我们稍后介绍。如果您是在 Linux 服务器上操作,不方便打开浏览器查看效果,还可以执行 curl 命令进行测试:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
$ curl http://localhost
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
    body {
        width: 35em;
        margin: 0 auto;
        font-family: Tahoma, Verdana, Arial, sans-serif;
    }
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>

<p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p>

<p><em>Thank you for using nginx.</em></p>
</body>
</html>

service 命令其他常用子命令列举如下:

1
2
3
4
5
6
7
8
# 查看运行状态
service nginx status
# 启动服务
service nginx start
# 停止服务
service nginx stop
# 重启服务
service nginx restart

配置

Nginx 的配置文件位于 /etc/nginx/ 目录下,里面包含若干配置文件和子目录:

  • nginx.conf 主配置文件;
  • modules-available 可用的模块配置;
  • modules-enabled 启用的模块配置;
  • sites-available 可用的站点配置;
  • sites-enabled 启用的站点配置;

实际上,Nginx 的配置文件只是 nginx.conf 主配置一个,只不过它可以导入其他配置。例如,sites-enabled 目录中保存启用的站点配置,nginx.conf 通过 include 将它们全部导入:

1
2
3
http {
    include /etc/nginx/sites-enabled/*;
}

Nginx 支持同时配置并运行多个站点,每个站点拆成一个配置文件,管理起来很清晰。实际上,按照惯例站点配置保存在 sites-available 目录下,再通过软链链接到 sites-enabled 目录:

1
2
3
$ ls -l /etc/nginx/sites-enabled/
total 0
lrwxrwxrwx 1 root root 34 Jul 29  2021 default -> /etc/nginx/sites-available/default

这样一来,如果想要临时关闭某个站点,我们只需将软链删掉。删除软链不会影响位于 sites-available 目录的配置文件,我们随时可以重新软链回来。

注意到,Nginx 安装完毕后,会开启一个默认站点 /etc/nginx/sites-enabled/default

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
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;
	}
}
  • listen 设置监听 80 端口,default_server 将当前站点设为默认站点;
  • root 设置网站的根目录路径,我们看到的默认欢迎页就位于该目录;
  • index 设置网站的索引页,URL 路径如果是个目录,会访问该目录下的索引页;
  • server_name 设置该站点的域名,这里忽略域名;

配置示例

SSL证书(HTTPS)

listen 监听端口设置 ssl 启用 HTTPSssl_certificatessl_certificate_key 指定证书文件:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
server {
	listen 80;
	listen [::]:80;

	listen 443 ssl;
	listen [::]:443 ssl;

	server_name www.fasionchan.com;

	# SSL configuration
	ssl_certificate /etc/ssl/certs/fasionchan.com.pem;
	ssl_certificate_key /etc/ssl/private/fasionchan.com.key;

	# 其他配置
	# ...
}

301重定向

这个配置访问 www.fasionchan.com 域名时返回 301 重定向到 https://fasionchan.com

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
server {
	listen 80;
	listen [::]:80;

	listen 443 ssl;
	listen [::]:443 ssl;

	server_name www.fasionchan.com;

	# SSL configuration
	ssl_certificate /etc/ssl/certs/fasionchan.com.pem;
	ssl_certificate_key /etc/ssl/private/fasionchan.com.key;

	# 301永久重定向
	rewrite ^/(.*)$ https://fasionchan.com/$1 permanent;
}

rewrite 第一个参数表示旧 URL 路径,即被访问的 www.fasionchan.com 的资源路径;路径是一个正则表达式,它可以匹配任意路径,括号则表示将匹配内容提取出来;第二个参数表示跳转目的地址,$1 代表正则表达式提取出的路径;第三个参数表示永久重定向,这样 nginx 会返回 301 状态码。

如果想实现 302 临时重定向,将 permanent 改成 redirect 即可:

1
rewrite ^/(.*)$ https://fasionchan.com/$1 redirect;

此外,我们还可以通过 return 指令来响应 301 永久重定向:

1
return 301 https://fasionchan.com$request_uri;

其中,$request_uri 是一个内部变量,代表当前请求的 URL 路径。

HTTPS强制跳转

如果站点同时监听 HTTPHTTPS 端口,为 HTTP 配置重定向即可强制跳转到 HTTPS

如果站点只监听 HTTPS 端口,而用户用 HTTP 协议请求,Nginx 会返回 497 错误。这是可以通过 error_page 指令配合 301 跳转强制拉回 HTTPS

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
server {
	listen 8080 ssl;
	listen [::]:8080 ssl;

	server_name example.fasionchan.com;

	# SSL configuration
	ssl_certificate /etc/ssl/certs/fasionchan.com.pem;
	ssl_certificate_key /etc/ssl/private/fasionchan.com.key;

	# 301永久重定向强制跳转到HTTPS
	error_page 497 =301 https://$host:$server_port$request_uri;
}

这个例子配置了站点 https://example.fasionchan.com:8080 ,但用户可能错误地通过 http://example.fasionchan.com:8080 来访问。这时 Nginx 将返回 497 错误,而 error_page 指令为 497 错误设置了 301 跳转,跳转到 HTTPS 版本。

反向代理

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
server {
    # 监听端口
    listen 80;
    # 代理对外域名
    server_name proxy-site.com;

    location / {
        # 转向服务器
        proxy_pass http://dest-site.com;
        proxy_redirect default;
    }
}

# 服务器集群及权重(可选)
upstream dest-site.com {
    server 10.0.0.1:80 weight=1;
}

静态资源

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
server {
    listen 80;
    server_name some-site.com;

    root /some/path/to/site;

    # 缓存图片
    location ~ \.(jpg|png|jpeg|bmp|gif|swf)$ {
        root /some/path/to/site/images;
        if (-f $request_filename) {
            expires 7d;
            break;
        }
    }

    # 缓存样式
    location ~ \.(css)$ {
        root /some/path/to/site/css;
        if (-f $request_filename) {
            expires 3d;
            break;
        }
    }

    # 缓存脚本
    location ~ \.(js)$ {
        root /some/path/to/site/js;
        if (-f $request_filename) {
            expires 1d;
            break;
        }
    }
}

Web Socket 转发

1
2
3
4
5
6
location /wsapp/ {
    proxy_pass http://wsbackend;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "Upgrade";
}

小菜学网络】系列文章首发于公众号【小菜学编程】,敬请关注:

【小菜学网络】系列文章首发于公众号【小菜学编程】,敬请关注: