Nginx的安装配置使用
Nginx的安装配置使用
安装
Nginx 在默认的 Ubuntu 源仓库中可用。想要安装它,运行下面的命令
sudo apt update
sudo apt install nginx
一旦安装完成,Nginx 将会自动被启动。你可以运行下面的命令来验证它:
sudo systemctl status nginx.service
想要测试你的新 Nginx 安装,在你的浏览器中打开http://YOUR_IP,你应该可以看到默认的 Nginx 加载页面
Nginx 配置文件结构以及最佳实践
- 所有的 Nginx 配置文件都在/etc/nginx/目录下。
- 主要的 Nginx 配置文件是/etc/nginx/nginx.conf。
- 为每个域名创建一个独立的配置文件,便于维护服务器。你可以按照需要定义任意多的 block 文件。
- Nginx 服务器配置文件被储存在/etc/nginx/sites-available目录下。在/etc/nginx/sites-enabled目录下的配置文件都将被 Nginx 使用。
- 最佳推荐是使用标准的命名方式。例如,如果你的域名是mydomain.com,那么配置文件应该被命名为/etc/nginx/sites-available/mydomain.com.conf,
然后在/etc/nginx/sites-enabled下建立软链接 ln -s /etc/nginx/sites-available/mydomain.com.conf 以便被 Nginx 使用
操作配置文件
- /etc/nginx/sites-available/default是虚拟站点的配置模板,在/etc/nginx/sites-available目录下存放站点配置文件。
- 必须先在/etc/nginx/sites-available目录下生成站点配置文件,然后在/etc/nginx/sites-enabled目录下建立软连接
cd /etc/nginx/sites-available
sudo cp /etc/nginx/sites-available/default mydomain.com.conf
vim mydomain.com.conf # 参考Nginx文件如何配置
cd /etc/nginx/sites-enabled
sudo ln -s /etc/nginx/sites-available/mydomain.com.conf
# nginx -t -c /etc/nginx/sites-available/mydomain.com.conf # nginx 检查配置文件语法错误
nginx -t # 使用 nginx -t -c 命令时,是使用指定的配置文件作为整个配置。由于 mydomain.com.conf 很可能不包含完整的配置块,因此这会可能导致错误。只使用 nginx -t 命令来测试整个配置。
nginx -s reload # nginx 重新加载配置文件
sudo systemctl status nginx.service # 查看 nginx 状态 | 使用 sudo systemctl start nginx 启动 nginx 服务
server {
listen 80;
listen [::]:80;
server_name mydomain.com;
root /home/your/web;
index index.html;
location / {
proxy_pass http://localhost:8080; # 将请求代理到本地的8080端口
proxy_set_header Host $host; # 保留原始的Host头部
proxy_set_header X-Real-IP $remote_addr; # 传递客户端的真实IP地址
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; # 传递代理链中的IP地址
proxy_set_header X-Forwarded-Proto $scheme; # 传递请求使用的协议(http或https)
try_files $uri $uri/ =404;
}
location /assets/ {
alias /home/your/web/assets/;
try_files $uri $uri/ =404;
}
}
# 静态 SPA 网站
server {
listen 80;
listen [::]:80;
server_name aaa.com;
rewrite ^(.*)$ https://$host$1; # 强制将http的URL重写成https
}
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name aaa.com;
ssl_certificate cert/aaa.com.pem; # 证书文件路径 /etc/nginx/cert/.....
ssl_certificate_key cert/aaa.com.key; # 私钥文件路径
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 5m;
location / {
root /home/xxxx/website/website-app/dist/website-app/browser;
index index.html;
try_files $uri $uri/ /index.html; # 尝试直接访问文件或目录,如果不存在则重定向到index.html
}
}
Nginx 端口转发
将域名转发到本地端口
首先介绍最常用的,将域名转发到本地另一个端口上
server{
listen 80;
server_name mydomain.com;
index index.php index.html index.htm;
location / {
proxy_pass http://127.0.0.1:8080; # 转发规则
proxy_set_header Host $proxy_host; # 修改转发请求头,让8080端口的应用可以收到真实的请求
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
这样访问 mydomain.com 时就会转发到本地的 8080 端口
将域名转发到另一个域名
server{
listen 80;
server_name mydomain.com;
index index.php index.html index.htm;
location / {
proxy_pass http://www.baidu.com;
proxy_set_header Host $proxy_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
这样访问 mydomain.com 时就会转发到 www.baidu.com
本地一个端口转发到另一个端口或另一个域名
server{
listen 80;
server_name 127.0.0.1; # 公网ip
index index.php index.html index.htm;
location / {
proxy_pass http://127.0.0.1:8080; # 或 http://www.baidu.com
proxy_set_header Host $proxy_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
这样访问 127.0.0.1 时就会转发到本地的 8080 端口或 http://www.baidu.com