Zhonghui

每个不曾起舞的日子,都是对生命的辜负

User Tools

Site Tools


软件:linux:nginx:nginx

Nginx

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+静态资源

# 一个基础的静态 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;
    }
}

实践:HTTPS+反向代理

# 暂未实际验证(应该没问题)
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; # 这样设置才能上传大文件
}

参考资料

/var/www/DokuWikiStick/dokuwiki/data/pages/软件/linux/nginx/nginx.txt · Last modified: 2025/09/15 15:38 by zhonghui