ubuntu 安装并配置 nginx
安装
确保已经安装了更新的软件包
使用以下命令更新软件包:
sudo apt update
sudo apt upgrade
安装 Nginx
使用以下命令安装 Nginx:
sudo apt install nginx
启动 Nginx
安装完成后,使用以下命令启动 Nginx:
sudo systemctl start nginx
设置 Nginx 开机自启
使用以下命令设置 Nginx 开机自启:
sudo systemctl enable nginx
配置防火墙
如果防火墙已启用,请添加 Nginx 的规则以允许传入的 HTTP 和 HTTPS 流量。例如,使用以下命令允许 HTTP 流量:
sudo ufw allow 'Nginx HTTP'
验证安装
在完成以上步骤后,您可以在 Web 浏览器中访问您的服务器的公共 IP 地址或域名。如果一切都设置正确,您应该能够看到 Nginx 欢迎页面。
设置 nginx 反向代理
若要设置 Nginx 反向代理,请执行以下步骤:
打开 Nginx 配置文件
使用以下命令打开 Nginx 的默认配置文件:
sudo nano /etc/nginx/sites-available/default
配置反向代理
在 "server" 块中添加以下内容:
location / {
proxy_pass http://localhost:3000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
在这个例子中,我们配置了一个反向代理,将所有请求转发到本地的端口 3000 上。
保存和退出
保存文件并退出编辑器。
重新加载 Nginx
使用以下命令重新加载 Nginx:
sudo systemctl reload nginx
验证反向代理
使用 Web 浏览器访问您的服务器的公共 IP 地址或域名,检查是否已正确设置反向代理。
好了,现在您已经成功地设置了一个反向代理。
例如:下面是一个基于第一点的示例:
假设你有两个网站,分别是example.com和example.net,你想要为每个网站创建一个单独的配置文件。可以按照以下步骤操作:
在/etc/nginx/sites-available目录下创建两个新的配置文件,分别为example.com和example.net,可以使用以下命令创建:
sudo nano /etc/nginx/sites-available/example.com
sudo nano /etc/nginx/sites-available/example.net
在这些文件中,可以按照需要定义每个网站的配置,例如:
server {
listen 80;
listen [::]:80;
server_name example.com;
root /var/www/example.com/public;
index index.html;
location / {
try_files $uri $uri/ =404;
}
}
一个真实的含https、websocket 的反向代理配置
# 设置 websocket
map $http_upgrade $connection_upgrade {
default upgrade;
'' close;
}
server {
listen 443 ssl;
# 博客域名
server_name www.robotai.cc robotai.cc;
access_log off;
ssl_certificate /etc/nginx/sites-available/cert/robotai-cc/robotai-cc.pem;
ssl_certificate_key /etc/nginx/sites-available/cert/robotai-cc/robotai-cc.key;
ssl_session_timeout 5m;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
#表示使用的加密套件的类型。
#表示使用的TLS协议的类型,您需要自行评估是否配置TLSv1.1协议。
ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3;
ssl_prefer_server_ciphers on;
location / {
proxy_pass http://127.0.0.1:3002$request_uri;
# proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
client_max_body_size 10m;
add_header Content-Security-Policy "upgrade-insecure-requests";
proxy_set_header X-Forwarded-Proto $scheme;
# 开启 websocket
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
proxy_set_header Host $host;
}
}
server {
listen 80;
server_name www.robotai.cc robotai.cc;
rewrite ^(.*)$ https://$host$1;
location / {
#root html;
#index index.html index.htm;
# mtons 博客
# proxy_pass http://127.0.0.1:8070;
# chatpad
proxy_pass http://127.0.0.1:3002;
proxy_read_timeout 5m;
# 开启 websocket
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
proxy_set_header Host $host;
}
}
在/etc/nginx/sites-enabled目录下创建符号链接,将它们链接到sites-available目录中的配置文件:
sudo ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/
sudo ln -s /etc/nginx/sites-available/example.net /etc/nginx/sites-enabled/
重启nginx服务器:
sudo systemctl restart nginx
现在,每个网站都有自己的配置文件,可以更方便地管理它们。如果需要禁用其中一个网站,只需从sites-enabled目录中删除对应的符号链接即可。如果需要更新某个网站的配置,只需编辑相应的配置文件,然后重新加载nginx配置即可。
/etc/nginx/sites-available 和 /etc/nginx/sites-available 目录区别,规范是什么
这两个目录是nginx默认配置文件存放的位置,但在使用中有不同的用途:
/etc/nginx/sites-available目录:该目录包含所有nginx的虚拟主机配置文件,每个文件对应一个虚拟主机。这些文件是可用的,但不一定被激活,即nginx服务器不会读取这些文件。在这个目录下创建配置文件,并在需要时通过符号链接(软链接)将其链接到/etc/nginx/sites-enabled目录中,即可激活该虚拟主机。
/etc/nginx/sites-enabled目录:该目录包含nginx服务器激活的虚拟主机配置文件的符号链接。nginx服务器只会读取这个目录下的配置文件链接。在这个目录中创建任何文件或配置都是无效的,只有在/etc/nginx/sites-available目录中创建文件并使用符号链接将其链接到这个目录中才能使用。
因此,规范是将所有的虚拟主机的配置文件放在/etc/nginx/sites-available目录中,使用符号链接将需要激活的虚拟主机配置文件链接到/etc/nginx/sites-enabled目录中。这样可以方便地管理和维护虚拟主机的配置
如何验证nginx 配置文件
可以使用下面的命令验证 Nginx 配置文件是否正确:
sudo nginx -t
该命令会检查 Nginx 配置文件的语法和结构是否正确,如果一切正常,会输出以下内容:
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
查看nginx log
要查看 Nginx 的日志,可以使用以下命令来打开 Nginx 的错误日志文件:
sudo tail -f /var/log/nginx/error.log
该命令将显示 Nginx 错误日志文件的最后几行内容,并在文件更新时自动更新。如果你想查找特定的错误消息,可以使用 grep
命令来过滤日志文件中的内容,例如:
sudo tail -f /var/log/nginx/error.log | grep "404"
该命令将只显示包含 "404" 的错误日志。