Nginx介绍

不介绍了吧,著名的web 服务器反向代理等,我为啥要用,就是防止别人用IP访问,

这个别人你猜是谁? 只有知道域名+端口才可以访问,用IP+端口啥也没有...

你猜猜为啥要这个功能?

为什么UI

一直以来我都喜欢编辑配置文件,现在好像老了

docker安装

docker run -dit \
  --name=nginx-ui \
  --restart=always \
  -e TZ=Asia/Shanghai \
  -v /opt/docker-data/nginx-ui/conf.d:/etc/nginx \
  -v  /opt/docker-data/nginx-ui/:/etc/nginx-ui \
  -p 2080:80 -p 2443:443 \
  uozi/nginx-ui:latest

配置

  • 修改 conf.d/nginx-ui.conf

主要是用域名才能访问配置界面

## 修改 server_name  后面的网址
server {
    listen       80;
    server_name  xxx.hello-kitty.com ;  # your domain here
    client_max_body_size 128M;  # maximum upload size

    location / {
        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;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection $connection_upgrade;
        proxy_pass http://127.0.0.1:9000/;
    }
}

## 加上下面内容(不允许IP访问)
  server {
    listen 80 default_server;
    listen [::]:80 default_server;
    server_tokens off;
    return 444;
}

然后,您就自由配置

2025-03-30T07:35:34.png

nginx-ui 加上 php74的支持

x86的 cat Dockerfile

# i # Docker继承 nginx+nginxui+php+mysql+sqlite容器 (x86)
# 使用 nginx-ui 作为基础镜像
FROM uozi/nginx-ui

# 设置工作目录
WORKDIR /app

# 更新源并安装软件包
RUN apt-get update && apt-get install -y \
    software-properties-common ca-certificates lsb-release apt-transport-https \
    && echo "deb https://packages.sury.org/php/ $(lsb_release -sc) main" > /etc/apt/sources.list.d/php.list \
    && wget -qO - https://packages.sury.org/php/apt.gpg | apt-key add - \
    && apt-get update \
    && apt-get install -y \
    php7.4-fpm \
    php7.4-ctype \
    php7.4-curl \
    php7.4-dom \
    php7.4-fileinfo \
    php7.4-ftp \
    php7.4-iconv \
    php7.4-json \
    php7.4-mbstring \
    php7.4-mysql \
    php7.4-mysqlnd \
    php7.4-pdo \
    php7.4-pdo-sqlite \
    php7.4-phar \
    php7.4-posix \
    php7.4-readline \
    php7.4-gd \
    php7.4-simplexml \
    php7.4-sqlite3 \
    php7.4-tokenizer \
    php7.4-xml \
    php7.4-xmlreader \
    php7.4-xmlwriter \
    # 清理 apt 缓存
    && apt-get clean \
    && rm -rf /var/lib/apt/lists/* \
    ## 添加PHP自启动
  && sed -i '/nginx -g "daemon off;"/d' /etc/s6-overlay/s6-rc.d/nginx/run \
  &&  echo 'php-fpm7.4' >> /etc/s6-overlay/s6-rc.d/nginx/run \
  &&  echo 'chmod 777 /run/php/php7.4-fpm.sock' >> /etc/s6-overlay/s6-rc.d/nginx/run \
  &&  echo 'nginx -g "daemon off;"' >> /etc/s6-overlay/s6-rc.d/nginx/run 
  
  

arm的版本cat Dockerfile

# i # Docker继承 nginx+nginxui+php+mysql+sqlite容器 (arm64)
# 使用 nginx-ui 作为基础镜像
FROM uozi/nginx-ui

# 设置工作目录
WORKDIR /app

# 更新源并安装软件包
RUN apt-get update && apt-get install -y \
    lsb-release ca-certificates apt-transport-https software-properties-common \
    && wget -O /etc/apt/trusted.gpg.d/php.gpg https://packages.sury.org/php/apt.gpg \
    && echo "deb https://packages.sury.org/php/ $(lsb_release -sc) main" > /etc/apt/sources.list.d/php.list \
    && apt-get update \
    && apt-get install -y \
    php7.4-fpm \
    php7.4-ctype \
    php7.4-curl \
    php7.4-dom \
    php7.4-fileinfo \
    php7.4-ftp \
    php7.4-iconv \
    php7.4-json \
    php7.4-mbstring \
    php7.4-mysql \
    php7.4-mysqlnd \
    php7.4-pdo \
    php7.4-pdo-sqlite \
    php7.4-phar \
    php7.4-posix \
    php7.4-readline \
    php7.4-gd \
    php7.4-simplexml \
    php7.4-sqlite3 \
    php7.4-tokenizer \
    php7.4-xml \
    php7.4-xmlreader \
    php7.4-xmlwriter \
    # 清理 apt 缓存
    && apt-get clean \
    && rm -rf /var/lib/apt/lists/* \
    ## 添加PHP自启动
  && sed -i '/nginx -g "daemon off;"/d' /etc/s6-overlay/s6-rc.d/nginx/run \
  &&  echo 'php-fpm7.4' >> /etc/s6-overlay/s6-rc.d/nginx/run \
  &&  echo 'chmod 777 /run/php/php7.4-fpm.sock' >> /etc/s6-overlay/s6-rc.d/nginx/run \
  &&  echo 'nginx -g "daemon off;"' >> /etc/s6-overlay/s6-rc.d/nginx/run 
  
  

创建镜像

docker build --no-cache -t nginx-ui-php74 .

创建容器

2025-04-08T07:07:52.png

  docker run -dit \
  --name=nginx-ui-php74 \
  --restart=always \
  -e TZ=Asia/Shanghai \
  -v /home/docker/nginx-ui/conf.d:/etc/nginx \
  -v  /home/docker/nginx-ui/etc/:/etc/nginx-ui \
  -v  /docker/docker-data/nginx-ui/www/:/www \
  -p 80:80 -p 443:443 \
  nginx-ui-php74:latest

php等网页放在 /docker/docker-data/nginx-ui/www/

nginx-ui-php配置

server {
    listen 80;
    listen [::]:80;
    server_name php.us.aico.vip;
    root /etc/nginx-ui/www;
    index index.php index.html index.htm;

    location ~ .*\.php(\/.*)*$ {
        # 开启 fastcgi 模式
        #fastcgi_pass 172.17.0.1:9000;
        fastcgi_pass unix:/run/php/php7.4-fpm.sock;
        fastcgi_index index.php;        
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }
    
        location / {
        index  index.php
        try_files $uri $uri/ /index.php?$query_string;
    }
    

     if (!-e $request_filename)
    {
        #rewrite ^(.*)$ /index.php$1 last;
        #break;
    }

}

typecho 的配置

 server {
  listen   85; ## listen for ipv4; this line is default and implied
  listen   [::]:85 default ipv6only=on; ## listen for ipv6

  root /app;
  index index.php index.html index.htm;

  location ~ .*\.php(\/.*)*$ {
    fastcgi_split_path_info ^(.+\.php)(/.+)$;
    try_files $uri /index.php =404;
    fastcgi_pass unix:/run/php/php7.4-fpm.sock;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    fastcgi_index index.php;
    include fastcgi.conf;
    fastcgi_connect_timeout 300;
    fastcgi_read_timeout 600;
    fastcgi_send_timeout 300;
    fastcgi_buffer_size 256k;
    fastcgi_buffers   4 256k;
    fastcgi_busy_buffers_size 768k;
    fastcgi_temp_file_write_size 768k;
    # Add the following line to get the client's real IP address
    fastcgi_param REMOTE_ADDR $http_x_real_ip;
  }


    location / {
          add_header X-Real-IP $proxy_add_x_forwarded_for;
          index index.html  index.php;
          try_files $uri $uri/ /index.php?$query_string;
    }

  location ~* \.(?:jpg|jpeg|gif|png|ico|cur|gz|svg|svgz|mp4|ogg|ogv|webm|htc|ttf|ttc|otf|eot|woff)$ {
    try_files $uri /index.php?$query_string;
    expires max;
    access_log off;
    log_not_found off;
    add_header Pragma public;
    add_header Cache-Control "public, must-revalidate, proxy-revalidate";
  }

  location ~* \.(?:css|js)$ {
    try_files $uri /index.php?$query_string;
    expires 1y;
    add_header Cache-Control "public";
  }

  # deny access to . files, for security
  location ~* (?:^|/)\. {
    access_log off;
    log_not_found off;
    deny all;
  }

  location ~* (?:\.(?:bak|config|db|sql|fla|psd|ini|log|sh|inc|swp|dist)|~)$ {
    deny all;
    access_log off;
    log_not_found off;
  }

}

自行制作精简版

采用 alpine, 大概200MB,但是尚未测试过.

# 基础镜像:Alpine 3.12(支持PHP7.2)
# arm32设备用 arm32v7/alpine:3.12,arm64用 arm64v8/alpine:3.12
FROM alpine:3.12

# 环境变量:时区和nginx-ui配置(使用tar.gz版本)
ENV TZ=Asia/Shanghai \
    NGINX_UI_VERSION=v2.0.0-rc.4 \
    NGINX_UI_ARCH=arm64-v8a

# 替换Alpine 3.12镜像源
RUN echo "http://mirrors.tuna.tsinghua.edu.cn/alpine/v3.12/main" > /etc/apk/repositories && \
    echo "http://mirrors.tuna.tsinghua.edu.cn/alpine/v3.12/community" >> /etc/apk/repositories

# 安装依赖(增加tar工具用于解压)
RUN set -ex && \
    apk add --no-cache --update \
    nginx \
    php \           
    php-fpm \
    php-mysqli \
    php-pdo_mysql \
    php-sqlite3 \
    php-json \
    php-curl \
    php-gd \
    php-mbstring \
    php-xml \
    php-opcache \
    mysql-client \
    sqlite \
    wget \
    tar \              
    gzip \        
    tzdata && \
    # 配置时区
    ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone && \
    # 下载并解压nginx-ui(tar.gz格式)
    wget -O /tmp/nginx-ui.tar.gz https://github.com/0xJacky/nginx-ui/releases/download/${NGINX_UI_VERSION}/nginx-ui-linux-${NGINX_UI_ARCH}.tar.gz && \
    mkdir -p /usr/local/nginx-ui && \
    tar -zxf /tmp/nginx-ui.tar.gz -C /usr/local/nginx-ui && \  
    chmod +x /usr/local/nginx-ui/nginx-ui && \
    # 清理临时文件
    rm -rf /tmp/* /var/cache/apk/* && \
    # 创建必要目录
    mkdir -p /var/www/html /var/log/nginx /var/run/php-fpm /etc/nginx/ui

# 复制配置文件(需提前准备)
COPY nginx.conf /etc/nginx/nginx.conf
COPY php-fpm.conf /etc/php7/php-fpm.conf
COPY default.conf /etc/nginx/conf.d/default.conf

# 暴露端口(Nginx 80,nginx-ui默认8080)
EXPOSE 80 8080

# 启动命令
CMD ["/bin/sh", "-c", "php-fpm7 && nginx -g 'daemon off;' & /usr/local/nginx-ui/nginx-ui --config /etc/nginx/ui/config.yaml"]