介绍
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.log
和error.log
)位于var/log/nginx/
录中。建议每个服务器块使用不同的access
和error
日志文件。 - 您可以将域文档根目录设置为所需的任何位置。 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 。
- 生成 dhparam.pem 文件, 在命令行执行方法:
openssl dhparam -out /etc/nginx/ssl/dhparam.pem 2048
- 在/etc/nginx/ssl 目录中新建为名www.example.com 的目录,并放入ssl证书,例如从阿里云下载的证书。
- 在/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;
}
}
- 激活
ln -s /etc/nginx/sites-available/www.example.com.conf /etc/nginx/sites-enabled/www.example.com.conf
- 使用
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