全栈开发实战——Nginx

原创
2020/12/09 09:33
阅读数 185

介绍

Nginx是一个开放源代码的高性能HTTP和反向代理服务器,为Internet上一些最大的站点提供支持。

Nginx可以用作独立的Web服务器,也可以用作 Apache 和其他Web服务器的反向代理。

与Apache相比,Nginx可以处理大量并发连接,并且每个连接的内存占用量较小。

安装

首先更新apt软件包列表:

sudo apt update

安装Nginx:

sudo apt install nginx

Nginx服务将在安装过程完成后自动启动。您可以通过运行以下 curl 命令进行验证:

curl -I 127.0.0.1

使用systemctl管理Nginx服务

您可以使用systemctl命令来管理Nginx服务,与其他任何systemd单元相同。这里我们只列举我们常用的命令。

要停止Nginx服务,请运行:

sudo systemctl stop nginx

要启动,请键入:

sudo systemctl start nginx

重新启动Nginx服务:

sudo systemctl restart nginx

进行一些配置更改后,重新加载Nginx服务:

sudo systemctl reload nginx

Nginx配置文件的结构和最佳做法

  • Nginx配置文件存储在/etc/nginx目录中。
  • 主要Nginx配置文件为/etc/nginx/nginx.conf
  • 服务器块(vhost)配置文件存储在/etc/nginx/sites-available目录。除非将这些文件链接到/etc/nginx/sites-enabled目录,否则Nginx不会使用该目录中的配置文件。
  • 通过从服务器目录创建 symlink (指针)来激活服务器块。配置文件站点从sites-available目录移至sites-enabled目录,例:ln -s /etc/nginx/sites-available/www.example.com /etc/nginx/sites-enabled/www.example.com
  • 要编写更具可维护性的代码,遵循标准命名约定是一个好主意。例如,如果您的域名是www.example.com,则配置文件应命名为/etc/nginx/sites-available/www.example.com.conf
  • /etc/nginx/snippets录包含可包含在服务器阻止文件中的配置摘要。如果使用可重复的配置段,则可以将这些段重构为片段,并将片段文件包括到服务器块中。
  • Nginx日志文件(access.logerror.log)位于var/log/nginx/录中。建议每个服务器块使用不同的accesserror日志文件。
  • 您可以将域文档根目录设置为所需的任何位置。 Webroot的最常见位置包括:
    • /home/<user_name>/<site_name>
    • /var/www/<site_name>
    • /var/www/html/<site_name>
    • /opt/<site_name>

配置

root指令

用于指定服务器文件的根目录,nginx会将location后面的uri与root指令指定的路径拼接起来,作为最终的文件路径。例如:

location /dist {
    root /usr/share/nginx/html;
}

当请求/dist/static/css/style.css时,nginx会将其映射到/usr/share/nginx/html/dist/static/css/style.css文件上。

alias指令

用于指定服务器文件的别名,nginx会将location后面的uri替换为alias指令指定的路径,作为最终的文件路径。例如:

location /dist {
    alias /usr/share/nginx/html;
}

当请求/dist/static/css/style.css时,nginx会将其映射到/usr/share/nginx/html/static/css/style.css文件上。

子路径部署时,尽量使用alias!访问的时候最后要带上 /,location最后不要加 /

# 示例
location / {
   proxy_pass http://127.0.0.1:8000/intelligent-heating/frontend/;
}
		
location /intelligent-heating/frontend {
    alias   D:\aobo\heating_plant\web\dist;
    index  index.html index.htm;
    try_files $uri $uri/ /intelligent-heating/frontend/index.html;
}

try_files

设置刷新的起始路径,避免出现找不到根路径从而404的问题

https 实例配置

mozilla开源了一个非常好用的工具: https://ssl-config.mozilla.org ,点一点就可以自动生成推荐的SSL配置。 有个不错的网站可以用来检测服务器证书配置情况,https://www.ssllabs.com/ssltest/analyze.html

  1. 生成 dhparam.pem 文件, 在命令行执行方法:
openssl dhparam -out /etc/nginx/ssl/dhparam.pem 2048
  1. 在/etc/nginx/ssl 目录中新建为名www.example.com 的目录,并放入ssl证书,例如从阿里云下载的证书。
  2. 在/etc/nginx/sites-available目录中新建名为 www.example.com 的文件,并输入以下内容:
server {
  # 根目录已经有个default了
  # listen 80 default_server;
  # listen [::]:80 default_server;
  listen 80;
  listen [::]:80;
  server_name www.example.com;
  # 重定向所有HTTP网站访问以使用HTTPS
  return 301 https://$host$request_uri;
}

server {
  # 指定ssl监听端口
  listen 443 ssl http2;
  listen [::]:443 ssl http2;

  # 证书绑定的域名,例如:www.example.com、localhost
  server_name www.example.com;
  # 指定服务器证书路径
  ssl_certificate /etc/nginx/ssl/www.example.com/1234567_www.example.com.pem;
  # 指定私钥证书路径
  ssl_certificate_key /etc/nginx/ssl/www.example.com/1234567_www.example.com.key;
  # 配置会话缓存为10m,大约40000个session
  ssl_session_cache shared:SSL:10m;
  # 配置会话缓存超时时间为1天
  ssl_session_timeout 1d;
  # 禁用会话重用
  ssl_session_tickets off;

  # DHE密码器的Diffie-Hellman参数, 推荐 2048 位
  ssl_dhparam /etc/nginx/ssl/dhparam.pem;

  # 指定SSL服务器端支持的协议版本
  # ssl_protocols TLSv1.2 TLSv1.3;
  ssl_protocols TLSv1.2;
  # 指定加密算法
  ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;
  # 在使用SSLv3和TLS协议时指定服务器的加密算法要优先于客户端的加密算法
  ssl_prefer_server_ciphers on;

  # 使用严格传输策略HSTS。当浏览器从HTTPS网站看到此标头时,它“获悉”只能使用HTTPS(SSL或TLS)访问该域。它会在max-age一段时间内(通常为31,536,000秒,大约等于1年)缓存此信息
  # includeSubDomains参数告诉浏览器HSTS策略也适用于当前域的所有子域,always参数确保为所有响应(包括内部生成的错误响应)设置标头
  add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;

  # 启用ssl OCSP stapling功能, 服务端主动查询OCSP结果, 提高TLS握手效率
  ssl_stapling on;
  # 开启OCSP stapling 验证
  ssl_stapling_verify on;
  # 使用根CA和中级证书验证OCSP响应的信任链
  ssl_trusted_certificate /etc/nginx/ssl/www.example.com/1234567_www.example.com.pem;

  # replace with the IP address of your resolver
  # resolver 127.0.0.1;
  # 匹配请求
  location / {
    # 设置客户端真实的域名(包括端口号)
    proxy_set_header Host $host;
    # 设置客户端或上一级代理IP
    proxy_set_header X-Real-IP $remote_addr;
    # 设置客户端或上一级端口
    proxy_set_header X-Real-Port $remote_port;
    # 设置在多层代理时会包含真实客户端及中间每个代理服务器的IP
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    # 设置客户端真实的协议(http还是https)
    proxy_set_header X-Forwarded-Proto $scheme;
    # 设置代理服务访问地址
    proxy_pass http://127.0.0.1:7060;
    # 静态资源代理
    # root /var/www/www.example.com;
    # try_files $uri $uri/ /index.html;
    # index index.html index.htm;
  }
}
  1. 激活
ln -s /etc/nginx/sites-available/www.example.com.conf /etc/nginx/sites-enabled/www.example.com.conf
  1. 使用systemctl restart nginx 重新启动nginx

Ruoyi-Vue3 前端项目子路径部署示例

  • vite.config.js 文件改动

  • router/index.js 文件改动

  • utils/request.js 文件改动

  • layout/components/Navbar.vue 文件改动

类似有 location.href = '/index' 的地方都要改

  • nginx 配置

  • nginx 配置(micro-app 微前端框架)

windows 注意事项

cd D:\applications\nginx-1.24.0
start nginx
.\nginx.exe -s reload
# reload 命令一般不生效,直接杀死吧
taskkill /IM nginx.exe /F
start nginx.exe

Docker 中的 nginx 访问宿主机 ip

主机可以在默认桥接网络模式下从容器访问。只需要通过其 Docker 网络 IP 引用它,而不是 localhost 或 127.0.0.1。

大多数 Docker 引擎安装会将主机表示为默认 docker0 桥接网络上的 172.17.0.1。

ip addr show docker0

展开阅读全文
加载中
点击引领话题📣 发布并加入讨论🔥
0 评论
0 收藏
0
分享
返回顶部
顶部