前言 当我们在部署前端应用时,总是需要一个HTTP服务器来托管应用的静态文件。亦或者当我们想要分流各种网络请求时,会需要一个网关服务器。可以承担上述职责的应用有很多,笔者比较熟悉的则是Nginx,由于近期时常需要重新部署Nginx,而过程中有许多重复使用的命令,本人的记性又很差,每次都要重新在网上搜索一轮,花费了许多时间,因此在这里写一篇笔记,以记录在Linux上安装并配置Nginx的一些流程和命令。
本人使用的发行版Linux为Ubuntu,因此下述的内容仅适用与Ubuntu。
常用命令 安装前进行系统的软件包更新:
1 2 sudo apt-update sudo apt-upgrade
安装nginx本体:
nginx配置文件更新后的重载:
1 sudo systemctl reload nginx
切换到nginx的根目录:
切换到nginx的可用站点配置文件所在目录:
1 cd /etc/nginx/sites-available
切换到nginx的日志文件所在目录:
配置文件 nginx的配置逻辑大概为:在sites-available
下的文件默认不会被读取,要想实际将某个配置文件映射至服务器,则需将该配置文件以软链接的形式放在sites-enabled
下。
笔者部署的站点很少,无需分文件管理,这里我们仅以修改默认的default
文件为例:
首先一个比较常用的功能是:将所有访问80端口的http请求重定向至443以使用https,这也是我们在浏览器访问一个链接时,无论是否指明https,最终都会访问https的原理:
1 2 3 4 5 6 7 8 9 10 11 12 server { # 监听IPV4端口 listen 80; # 监听IPV6端口 listen [::]:80; # 指定访问需携带的域名 server_name www.xxxxxxx.com; return 301 https://$host$request_uri; }
重定向后,自然我们也得开启一个https的服务器才行,否则重定向没有意义:
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 34 35 36 server { # 监听IPV4端口 listen 443 ssl http2; # 监听IPV6端口 listen [::]:443 ssl http2; # 指定访问需携带的域名 server_name www.xxxxxxx.com; # 配置相关ssl证书 ssl_certificate /etc/nginx/certs/cloudflare.crt; ssl_certificate_key /etc/nginx/certs/cloudflare.key; # 开启HSTS以提高安全性 add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload"; # 将以“api”开头的请求全部转发至后端:http://localhost:4000 location /api { proxy_redirect off; #proxy_set_header Host $host; proxy_set_header X-Forwarded-Host $http_host; proxy_set_header X-Forwarded-Proto $scheme; proxy_pass http://localhost:4000; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } # 默认的http静态文件的位置 location / { root /var/www; # First attempt to serve request as file, then # as directory, then fall back to displaying a 404. try_files $uri $uri/ /index.html =404; } }
还有一个比较重要的配置是:阻止任何仅用IP而不带链接访问的请求,这个可以增加安全性以及防止强迫症。
1 2 3 4 5 6 7 8 server { listen 80 default_server; listen [::]:80 default_server; server_name _; return 444; }