https://github.com/nginx/nginx
高性能的HTTP服务器,开源,可以作为Apache 2的代替学习一下
Apache 2用起来也没什么问题,只是感觉有点笨重,配置文件有点繁琐
Nginx 能做负载均衡:
因为它本身不仅是一个高性能 Web 服务器,还是一个反向代理服务器,具备请求转发、分发流量、健康检查、连接管理等能力。
先学的是Apache网页服务器,Nginx有什么问题也可以参考一下之前的Apache 2的笔记
apt-get install nginx systemctl start nginx root@osaka:/etc/nginx/sites-available# systemctl reload nginx root@osaka:/etc/nginx/sites-available# systemctl status nginx # 创建一个新的配置文件并且link root@osaka:/etc/nginx/sites-available# touch 01-static root@osaka:/etc/nginx/sites-available# ln -s /etc/nginx/sites-available/01-static /etc/nginx/sites-enabled/ root@osaka:/etc/nginx/sites-available# ls ../sites-enabled/ -lh total 0 lrwxrwxrwx 1 root root 36 Jul 26 01:52 01-static -> /etc/nginx/sites-available/01-static lrwxrwxrwx 1 root root 34 Jul 26 01:42 default -> /etc/nginx/sites-available/default root@osaka:/etc/nginx/sites-available# nginx -v nginx version: nginx/1.22.1 root@osaka:/etc/nginx/sites-available# nginx -s reload 2025/07/26 01:54:39 [notice] 9900#9900: signal process started root@osaka:/etc/nginx/sites-available# nginx -t nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful
# 配置文件
/etc/nginx/nginx.conf
# 这两个文件架构在Debian/Ubuntu上,其他发行版不一定
/etc/nginx/sites-available/
/etc/nginx/sites-enabled/
# 配置文件的组织结构:
# 主要的配置文件(nginx.conf)会include其他的配置文件
# 最终形成一个总的配置文件,这个配置文件的结构是:
# 1. global
# 2. events
events {
...
}
# 3. http
http {
# 3.1 server
server {
# 3.2 location
location / {
...
}
}
}
# 我们创建一个新的「网站」,基本就是创建两个server{} (http + https)
# 它们会自动被include到http{}中
Nginx 默认运行用户通常是 www-data (Debian/Ubuntu) 或 nginx (CentOS/RHEL),要确保web_root有权限(至少有rx权限)
# 申请证书还是使用acme.sh,模式也和Apache 2一样,流程也类似 # issue的部分和Apache 2一样 # 申请证书,这个 path 可以使用公用的,反正只是临时用一下 acme.sh --issue -d djwcb.com -w /var/www/acmesh_root # 安装的部分只需要两个文件 acme.sh --install-cert -d djwcb.com \ --key-file /var/www/acmesh_cert/djwcb.com/key.pem \ --fullchain-file /var/www/acmesh_cert/djwcb.com/cert.pem \ --reloadcmd "systemctl restart nginx"
# 一个基础的静态 HTTPS 配置模板
server {
listen 80;
server_name djwcb.com www.djwcb.com;
location ^~ /.well-known/acme-challenge/ {
root /var/www/acmesh_root;
default_type "text/plain";
}
location / {
return 301 https://$host$request_uri;
}
}
server {
listen 443 ssl http2;
server_name djwcb.com www.djwcb.com;
ssl_certificate /var/www/acmesh_cert/djwcb.com/cert.pem;
ssl_certificate_key /var/www/acmesh_cert/djwcb.com/key.pem;
root /var/www/djwcb.com/dist;
location / {
try_files $uri $uri/ =404;
}
location ~* \.(css|js|png|jpg|jpeg|gif|svg|webp|ico|woff2?)$ {
expires 30d;
access_log off;
}
}
# 暂未实际验证(应该没问题)
server {
listen 80;
server_name ol.osakayaki.com;
location ^~ /.well-known/acme-challenge/ {
root /var/www/acmesh_root;
default_type "text/plain";
}
location / {
return 301 https://$host$request_uri;
}
}
upstream backend_openlist {
server 127.0.0.1:8080;
}
server {
listen 443 ssl http2;
server_name ol.osakayaki.com;
ssl_certificate /var/www/acmesh_cert/ol.osakayaki.com/cert.pem;
ssl_certificate_key /var/www/acmesh_cert/ol.osakayaki.com/key.pem;
location / {
proxy_pass http://backend_openlist;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
# OpenList推荐的反向代理配置
location / {
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Range $http_range;
proxy_set_header If-Range $http_if_range;
proxy_redirect off;
proxy_pass http://127.0.0.1:5244;
proxy_http_version 1.1;
# the max size of file to upload
client_max_body_size 20000m; # 这样设置才能上传大文件
}