彭某的技术折腾笔记

彭某的技术折腾笔记

Nginx 反向代理基本使用

28
2023-07-26

Nginx 反向代理基本使用

2023年7月26日

摘要

Nginx 相较于 Apache 更加轻量化,常作为需求并不复杂的反向代理服务器使用,本文主要提供了一个用于部署 Nginx 的 Docker-Compose 脚本和一个 Nginx 的配置文件模版。

Docker-Compose 部署脚本

使用 Docker-Compose 是最简单的部署方法,且如果有需求的话,可以轻易的在一个系统中部署多个 Nginx 服务器。Docker-Compose 的模版如下:

version: "2"
services:
  nginx:
    image: linuxserver/nginx:latest
    container_name: nginx
    environment:
      - PUID=1000
      - PGID=1000
      - TZ=Asia/Shanghai
    volumes:
      - {CONFIG_MAPPING_PATH}:/config
    ports:
      - {HTTP_PORT}:80
      - {HTTPS_PORT}:443
    restart: unless-stopped

此模版使用了专门构建各种易用的 Docker 容器的开源组织 LinuxServer 构建的 Nginx 容器,使用时请将 {CONFIG_MAPPING_PATH} 更改为系统中配置文件的映射路径,并将 HTTP_PORTHTTPS_PORT 更改为服务器对外暴露的端口号。

Nginx 配置文件

这里提供了一个 Nginx 模版配置文件:

user root;
worker_processes auto;

events {
    worker_connections 768;
    multi_accept on;
}

http {
        
    sendfile on;
    tcp_nopush on;
    tcp_nodelay on;
    keepalive_timeout 65;
    types_hash_max_size 2048;
    server_tokens off;

    include /etc/nginx/mime.types;
    default_type application/octet-stream;

    access_log /config/log/nginx/access.log;
    error_log /config/log/nginx/error.log;


    gzip on;
    gzip_disable "msie6";

    server {
        listen 80;

        server_name LISTEN_DOMAIN; # Modify

        location / {
            proxy_pass http://HOSTNAME:PORT; # Modify
            proxy_redirect off;
            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-Host $server_name;
        }
    }

    server {
        listen 443 ssl;
        
        server_name LISTEN_DOMAIN; # Modify
        
        ssl_certificate     /config/keys/psc/cert.crt;
        ssl_certificate_key /config/keys/psc/cert.key;
        
        location / {
            proxy_pass http://HOSTNAME:PORT; # Modify
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        }
    }
  
}

daemon off;

只用更改注释了 # Modify 的部份即可。server_name 是浏览器用户输入的域名,例如 blog.pscpeng.xyz 或是 research.pscpeng.xyz 即使他们对应同一个 IP,也会因为浏览器访问时协议头部携带的信息告诉 Nginx 用户输入的是哪个域名,Nginx 会根据这个域名决定和配置文件中的哪个 server 项建立连接。 proxy_pass 是反向代理的背后真正的那个服务器地址,一般都是局域网地址。

  • 0