1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/mjpclab-go-http-file-server

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
Loading...
README.md

Go HTTP File Server

Простой сервер HTTP на основе командной строки для обмена локальной файловой системой.

Страницы Go HTTP File Server

Основные возможности

  • Дружественный интерфейс пользователя по сравнению с Apache/Nginx
  • Поддержка мобильных устройств
  • Одно исполняемое файл
  • Возможность загрузки всего содержимого текущей директории в виде архивного файла (если включено)
  • Возможность загрузки файлов в текущую директорию (если включено)
  • Возможность указания пользовательской темы для отображения страниц
  • Поддержка псевдонимов расположений (монтирование другой директории в URL-локацию)

Технические возможности

  • Монолитная архитектура
  • Безостояние
  • Нулевая зависимость от сторонних библиотек

Сборка

Минимальная требуемая версия Go — 1.18.

go build main.go

Создаст исполняемый файл "main" в текущей директории.

Примеры

Запустить сервер на порту 8080, корневая директория — текущая рабочая директория:

ghfs -l 8080

Запустить сервер на порту 8080, корневая директория — /usr/share/doc:

ghfs -l 8080 -r /usr/share/doc

Запустить сервер на стандартном порту, корневая директория — /var/tmp, и разрешить загрузку файлов в ./data:

ghfs -r /var/tmp -u /data
# или
ghfs -r /var/tmp --upload-dir /var/tmp/data

Поделиться файлами из /etc, но также монтировать /usr/share/doc в URL-путь /doc

ghfs -r /etc -a :/doc:/usr/share/doc
```Запустить сервер на порту 8080, обслуживание по протоколу HTTPS
```sh
ghfs -k /путь/к/ключу/сертификата -c /путь/к/файлу/сертификата -l 8080

Не показывать скрытые директории и файлы Unix, начинающиеся с .. Совет: оберните символы-шаблоны кавычками, чтобы предотвратить расширение оболочкой.

ghfs -H '.*'

Показать журнал доступа на консоль:

ghfs -L -

Http Basic Auth:

  • требует аутентификации для URL /files
  • имя пользователя: user1, пароль: pass1
  • имя пользователя: user2, пароль: pass2
ghfs --auth /files --user user1:pass1 --user-sha1 user2:8be52126a6fde450a7162a3651d589bb51e9579d

Поделиться /data, разрешить права на загрузку файлов в /data/upload для пользователей "admin" и "root", остальные — только для чтения:

ghfs -r /data --user admin:adminpass root:rootpass user1:user1pass user2:user2pass --upload-user :/upload:admin:root

Запустите 2 виртуальных хоста:

  • сервер 1
    • прослушивание порта 80 для HTTP
    • прослушивание порта 443 для HTTPS
      • файл сертификата: /cert/server1.pem
      • файл ключа: /cert/server1.key
    • имя хоста: server1.example.com
    • корневая директория: /var/www/server1
  • сервер 2
    • прослушивание порта 80 для HTTP
    • прослушивание порта 443 для HTTPS
      • файл сертификата: /cert/server2.pem
      • файл ключа: /cert/server2.key
    • имя хоста: server2.example.com
    • корневая директория: /var/www/server2
ghfs --listen-plain 80 --listen-tls 443 -c /cert/server1.pem -k /cert/server1.key --hostname server1.example.com -r /var/www/server1 ,, --listen-plain 80 --listen-tls 443 -c /cert/server2.pem -k /cert/server2.key --hostname server2.example.com -r /var/www/server2

Использование

ghfs [опции]
```-l|--listen <ip|port|:port|ip:port|socket> ...
    IP и порт, на которых сервер прослушивает, например ":80" или "127.0.0.1:80".
    Если указаны --cert и --key, порт прослушивает соединения TLS.
    Если порт не указан, используется "80" для режима чистого HTTP или "443" для режима TLS.
    Если значение содержит "/", то оно рассматривается как файл Unix-сокета.
    Флаг "-l" или "--listen" может быть опущен.
--listen-plain <ip|port|:port|ip:port|socket> ...
    Аналогично --listen, но заставляет использовать режим без TLS.
--listen-tls <ip|port|:port|ip:port|socket> ...
    Аналогично --listen, но заставляет использовать режим TLS, что приведет к ошибке, если не указаны сертификат или ключ.

--hostname <hostname> ...
    Указывает имя хоста, связанное с текущим виртуальным хостом.
    Если значение начинается с ".", оно рассматривается как суффикс, чтобы соответствовать всем уровням поддоменов. Например ".example.com"
    Если значение заканчивается на ".", оно рассматривается как префикс, чтобы соответствовать всем уровням суффиксных доменов.

-r|--root <directory>
    Корневая директория сервера.
    По умолчанию используется текущая рабочая директория.

-R|--empty-root
    Использовать виртуальную пустую директорию как корневую директорию.
    Полезно для размещения только псевдонимов директорий.

-a|--alias <разделитель><url-путь><разделитель><fs-путь> ...
    Устанавливает псевдоним пути.
    Монтирует файловую системную директорию к URL-пути.
    Например ":/doc:/usr/share/doc"--prefix <path> ...
    Обслуживает файлы под определённым под-URL-пути.
    Может быть полезно, если сервер находится за прокси-сервером и
    получает запросы без удалённого пути прокси-сервера.

-/|--auto-dir-slash [<status-code>=301]
    Если запрошенная страница списка директорий не содержит завершающего "/" в URL,
    перенаправляет на URL с этим суффиксом.
    Если запрошен файл с завершающим "/" в URL,
    перенаправляет на URL без этого суффикса.

--default-sort <sortBy>
    По умолчанию сортирует файлы и директории.
    Доступные ключи сортировки:
    - `n` сортировка по имени в порядке возрастания
    - `N` сортировка по имени в порядке убывания
    - `e` сортировка по типу (суффиксу) в порядке возрастания
    - `E` сортировка по типу (суффиксу) в порядке убывания
    - `s` сортировка по размеру в порядке возрастания
    - `S` сортировка по размеру в порядке убывания
    - `t` сортировка по времени изменения в порядке возрастания
    - `T` сортировка по времени изменения в порядке убывания
    - `_` без сортировки
    Сортировка директорий:
    - `/<key>` директории перед файлами
    - `<key>/` директории после файлов
    - `<key>` директории перемешаны с файлами

```-I|--dir-index <file> ...
    Указывает файл по умолчанию для индекса директории.```--global-restrict-access [<allowed-host> ...]
    Ограничение доступа с третьих сторон для всех путей URL путем обнаружения
    заголовка запроса `Referer` или `Origin`.
    Если заголовок запроса пуст, страница списка директорий все еще доступна.
    Если разрешенный хост не указан, содержимое файла может быть доступно только
    с текущего хоста. Обратите внимание, что это не поможет ограничить доступ с
    других хостов, которые указывают домен на ваш хост и могут соответствовать
    текущему виртуальному хосту, если не указать разрешенный хост явно.
    "Хост" может быть именем хоста, что означает использование порта по умолчанию,
    или формой "хост:порт".--restrict-access <separator><url-path>[<separator><allowed-host>...] ...
    Аналогично --global-restrict-access, но для конкретного URL-пути (и подпутей).
    Например: "#/url/path#example1.com#example2.com".

--restrict-access-dir <separator><fs-path>[<separator><allowed-host>...] ...
    Аналогично --global-restrict-access, но для пути файловой системы (и подпутей).
    Например: "#/fs/path#example1.com#example2.com".

--global-header <name>:<value> ...
    Добавляет пользовательский заголовок HTTP-ответа.

--header <separator><url-path><separator><name><separator><value> ...
    Добавляет пользовательский заголовок HTTP-ответа для конкретного URL-пути (и подпутей).

--header-dir <separator><fs-path><separator><name><separator><value> ...
    Аналогично --header, но использует путь файловой системы вместо URL-пути.

--user [<username>]:[<password>] ...
    Указывает пользователей для текущего виртуального хоста для Basic Auth, пустое имя пользователя и/или пароль допустимы.
--user-base64 [<username>]:[<base64-password>] ...
--user-md5 [<username>]:<md5-password> ...
--user-sha1 [<username>]:<sha1-password> ...
--user-sha256 [<username>]:<sha256-password> ...
--user-sha512 [<username>]:<sha512-password> ...
    Указывает пользователей для Basic Auth с зашифрованным паролем.--global-auth
    Использование Basic Auth для всех путей URL.
--auth <url-path> ...
--auth-user <separator><url-path>[<separator><allowed-username>...] ...
    Использование Basic Auth для конкретных путей URL (и подпутей).
--auth-dir <fs-path> ...
--auth-dir-user <separator><fs-path>[<separator><allowed-username>...] ...
    Использование Basic Auth для конкретных путей файловой системы (и подпутей).
--index <url-path> ...
--index-user <separator><url-path>[<separator><allowed-username>...] ...
    Устанавливает URL-пути (и подпути) для разрешения индексации файлов директории.
    --index по умолчанию равен "/".
    Установите на "" для отключения индексации.
--index-dir <fs-path> ...
--index-dir-user <separator><fs-path>[<separator><allowed-username>...] ...
    Аналогично --index, но использует путь файловой системы вместо URL-пути.-U|--global-upload
    Разрешает загрузку файлов для всех URL-путей.
    Используйте с осторожностью.
-u|--upload <url-path> ...
--upload-user <separator><url-path>[<separator><allowed-username>...] ...
    Устанавливает URL-пути (и подпути) для разрешения загрузки файлов.
    Используйте с осторожностью.
--upload-dir <fs-path> ...
--upload-dir-user <separator><fs-path>[<separator><allowed-username>...] ...
    Аналогично --upload, но использует путь файловой системы вместо URL-пути.
    Используйте с осторожностью.

    Примечания к опциям загрузки:
        Если файл с таким именем уже существует и является обычным файлом,
        будет попытка его удалить, если удаление разрешено (например, с помощью --delete),
        в противном случае будет попытка добавить или увеличить числовую суффиксу.
        Для режима загрузки директорий поддиректории будут загружены только если создание директорий разрешено.

--global-mkdir
    Разрешает создание поддиректорий под всеми URL-пути.
--mkdir <url-path> ...
--mkdir-user <separator><url-path>[<separator><allowed-username>...] ...
    Разрешает создание поддиректорий под конкретными URL-пути (и подпути).
--mkdir-dir <fs-path> ...
--mkdir-dir-user <separator><fs-path>[<separator><allowed-username>...] ...
    Аналогично --mkdir, но использует путь файловой системы вместо URL-пути.

    Примечания к опциям создания директорий:
        Чтобы избежать неоднозначности, имена, которые тенируются альтернативными элементами, не могут быть созданы.--global-delete
    Разрешает удаление элементов под всеми URL-пути.
--delete <url-path> ...
--delete-user <separator><url-path>[<separator><allowed-username>...] ...
    Разрешает удаление элементов под конкретными URL-пути (и подпути).
--delete-dir <fs-path> ...
--delete-dir-user <separator><fs-path>[<separator><allowed-username>...] ...
    Аналогично --delete, но использует путь файловой системы вместо URL-пути.

    Примечания к опциям удаления:
        Чтобы избежать неоднозначности, альтернативные элементы под путем не могут быть удалены.
        Непосредственные файлы/директории внутри альтернативных элементов все еще могут быть удалены.
        Чтобы избежать неоднозначности, файлы/директории, которые тенируются альтернативными элементами, не могут быть удалены.
-A|--global-archive
    Разрешает пользователю загрузку всего содержимого текущей директории для всех путей URL.
    Ссылка для загрузки появляется в верхней части страницы.
    Убедитесь, что нет циклических ссылок.
--archive <url-path> ...
--archive-user <separator><url-path>[<separator><allowed-username>...] ...
    Разрешает пользователю загрузку всего содержимого текущей директории для конкретных путей URL (и поддиректорий).
--archive-dir <fs-path> ...
--archive-dir-user <separator><fs-path>[<separator><allowed-username>...] ...
    Аналогично --archive, но использует путь файловой системы вместо пути URL.--global-cors
    Разрешает запросы CORS для всех путей URL.
--cors <url-path> ...
    Разрешает запросы CORS для конкретных путей URL (и подкаталогов).
--cors-dir <fs-path> ...
    Разрешает запросы CORS для конкретных путей файловой системы (и подкаталогов).-c|--cert <file> ...
    Указывает файл сертификата TLS.

-k|--key <file> ...
    Указывает файл ключа сертификата TLS.

--theme <file>
    Указывает архив ZIP как пользовательскую тему для отображения страницы и активов вместо встроенных.
    Содержимое темы кэшируется в памяти во время выполнения.
--theme-dir <directory>
    Указывает директорию, содержащую файлы темы.
    Содержимое темы будет оцениваться для каждого запроса.
    Это удобно для разработки тем.

    Примечания к параметрам темы:
        --theme и --theme-dir взаимоисключающие.
        --theme-dir имеет приоритет.
        Имя файла шаблона страницы всегда "index.html".
        Используйте "?asset=<asset-path>", чтобы ссылаться на актив в теме.

--hsts [<max-age>]
    Включает HSTS (HTTP Strict Transport Security).
    Доступно только если текущий виртуальный хост прослушивает как обычный HTTP, так и TLS на стандартных портах.
--to-https [<target-port>]
    Перенаправляет запросы HTTP на порт HTTPS TLS.
    Целевой порт должен быть указан в --listen-tls текущего виртуального хоста.
    Если целевой порт не указан, будет использован первый элемент из --listen-tls.

-S|--show <wildcard> ...
-SD|--show-dir <wildcard> ...
-SF|--show-file <wildcard> ...
    Если указано, файлы или директории, соответствующие маскам (кроме скрытых по опции hide), будут отображаться.-H|--hide <wildcard> ...
-HD|--hide-dir <wildcard> ...
-HF|--hide-file <wildcard> ...
    Если указано, файлы или директории, соответствующие маскам, не будут отображаться.```markdown
-L|--access-log <file>
    Файл журнала доступа.
    Установите "-" для использования stdout.
    Установите пустое значение для отключения журнала доступа.```markdown
-E|--error-log <file>
    Файл журнала ошибок.
    Установите "-" для использования stderr.
    Установите пустое значение для отключения журнала ошибок.
    По умолчанию равно "-".

--config <file>
    Указание опций из внешнего файла.

    Содержимое файла — это список опций в любом другом формате,
    такой же, как и на командной строке,
    разделённый пробелами.

    Приоритет внешнего конфигурационного файла ниже, чем у аргументов, указанных на командной строке.
    Если опция указана на командной строке, то внешний конфигурационный файл этой опции будет игнорирован.

    Установите "-" для использования stdin.

,,
    Для указания нескольких виртуальных хостов с опциями, разделите опции этих хостов этим знаком.
    Вышеуказанные опции могут быть указаны для каждого виртуального хоста.

    Если несколько виртуальных хостов используют одинаковый IP и порты,
    используйте --hostname для идентификации их по запросу.
    Если имя хоста запроса не соответствует ни одному виртуальному хосту,
    сервер попытается использовать первый виртуальный хост без имени хоста,
    в противном случае использует первый виртуальный хост.

Переменные окружения

GHFS_CPU_PROFILE_FILE

Создаёт профиль Go's CPU pprof в указанном пути файла.

GHFS_PID_FILE

Указывает путь файла PID. PID будет записан в файл при запуске приложения.

Указывает размер очереди для хранения журналов, которые ещё не были записаны в место назначения.
Если очередь заполнена, отправка журналов будет заблокирована до тех пор, пока в очереди не появится свободное место.
По умолчанию равно 256.

### GHFS_QUIET
Чтобы предотвратить вывод дополнительной информации на консоль, такой как доступные URL и т.д.,
укажите значение "1".

## Клавиатурные сокращения для стандартной темы
- `←`, `→`: перемещение фокуса между элементами пути
- `Ctrl`/`Opt` + `←`: перемещение фокуса к первому элементу пути
- `Ctrl`/`Opt` + `→`: перемещение фокуса к последнему элементу пути
- `↑`, `↓`: перемещение фокуса между элементами файла
- `Ctrl`/`Opt` + `↑`: перемещение фокуса к первому элементу файла
- `Ctrl`/`Opt` + `↓`: перемещение фокуса к последнему элементу файла
- Повторное ввод одного и того же символа будет искать следующий файл, который начинается с этого префикса. + `Shift` для обратного направления.
- Однократные вводы будут запоминаться как строка на короткое время для поиска следующего файла с таким префиксом. + `Shift` для обратного направления.
- При включённой загрузке, вставка изображения или текстового содержимого (`Ctrl`/`Cmd` + `v`) загрузит это содержимое как файл.

Комментарии ( 0 )

Вы можете оставить комментарий после Вход в систему

Введение

Простой HTTP-сервер для обмена файлами с локальной файловой системой, основанный на командной строке. Развернуть Свернуть
Go и 5 других языков
MIT
Отмена

Обновления (76)

все

Участники

все

Недавние действия

Загрузить больше
Больше нет результатов для загрузки
1
https://api.gitlife.ru/oschina-mirror/mjpclab-go-http-file-server.git
git@api.gitlife.ru:oschina-mirror/mjpclab-go-http-file-server.git
oschina-mirror
mjpclab-go-http-file-server
mjpclab-go-http-file-server
main