[TIL-20260128] Nginx Basic Auth, Github Actions๋กœ .htpasswd ์ƒ์„ฑ

2026. 1. 28. 22:19ยทToday I Learned ๐Ÿง

 

๐Ÿ€ To Do List

 

 

๐Ÿ‘ฉ๐Ÿป‍๐Ÿ’ป Today I Learned ...

์‹ค๋ฌด์—์„œ๋Š” Swagger๋ฅผ ์จ๋ณด์ง€ ๋ชป ํ•ด์„œ .. ์‚ฌ์ด๋“œ ํ”„๋กœ์ ํŠธ์—์„œ ์ฒ˜์Œ ๋„์ž…ํ•˜๋ฉด์„œ ๋ณด์•ˆ ์ฒ˜๋ฆฌ๋ฅผ ์–ด๋–ป๊ฒŒ ํ•˜๋Š” ๊ฒŒ ์ข‹์„์ง€ ๋ง‰๋ง‰ํ–ˆ๋‹ค.

FE ๊ฐœ๋ฐœ์ž์ธ ์ง๊ฟํ•œํ…Œ ๋ฌผ์–ด๋ณด๋‹ˆ, ์ง๊ฟ์˜ ํšŒ์‚ฌ์—์„œ๋Š” Nginx์—์„œ ์ ‘๊ทผ ์ œํ•œ์„ ํ•˜๊ณ  ์žˆ๋‹ค๊ณ  ์•Œ๋ ค์ค˜์„œ ๋‚˜๋„ ์ ์šฉํ•ด๋ดค๋‹ค !

TIL์—๋Š” ๊ฐ„๋‹จํ•œ ๊ฐœ๋… ์ •๋ฆฌ๋งŒ ํ•˜๊ณ , ํŠธ๋Ÿฌ๋ธ” ์ŠˆํŒ…์„ ํฌํ•จํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ์€ ์‚ฌ์ด๋“œ ํ”„๋กœ์ ํŠธ ๊ธฐ๋ก ์ผ์ง€์— ์ž‘์„ฑํ•  ์˜ˆ์ •์ด๋‹ค. โœ๐Ÿป

 

 

Nginx์— Basic Auth ์ ์šฉํ•˜๊ธฐ

Basic Auth๋ž€ ์„œ๋ฒ„์—์„œ ์ธ๊ฐ€๋˜์ง€ ์•Š์€ ์‚ฌ์šฉ์ž๋“ค์˜ ์ ‘๊ทผ์„ ์ œํ•œํ•  ์ˆ˜ ์žˆ๋Š” ์ธ๊ฐ€ ์‹œ์Šคํ…œ์„ ์˜๋ฏธํ•œ๋‹ค.

Nginx์— basic Auth๋ฅผ ์ ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” nginx.conf ํŒŒ์ผ์— basic Auth์„ ์ถ”๊ฐ€ํ•ด์ฃผ๊ณ , ์•„์ด๋”” ํŒจ์Šค์›Œ๋“œ ๊ฐ’์ด ๋‹ด๊ธด .htpasswd ํŒŒ์ผ์˜ ์œ„์น˜๋ฅผ ์ง€์ •ํ•ด์ฃผ๋ฉด ๋œ๋‹ค.

 

๋‚˜๋Š” ์•„๋ž˜์ฒ˜๋Ÿผ Swagger ui์— ์ ‘์†ํ–ˆ์„ ๋•Œ ์•„์ด๋””์™€ ํŒจ์Šค์›Œ๋“œ๋ฅผ ์ž…๋ ฅํ•ด์„œ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•˜์˜€๋‹ค.

        location ~ ^/(swagger-ui|v3/api-docs) {
            auth_basic "Restricted Access - Swagger";
            auth_basic_user_file /etc/nginx/.htpasswd;
			
            #.. ์ƒ๋žต
            
        }

 

์ฐธ๊ณ  : 

 

[Nginx] Basic Auth

์ด๋ฒˆ๊ธ€์—์„œ๋Š” nginx์˜ basic auth๋ฅผ ์‚ฌ์šฉํ•ด ์ธ๊ฐ€๋œ ์‚ฌ์šฉ์ž์—๊ฒŒ๋งŒ ์ ‘๊ทผ์„ ํ—ˆ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. 1. Basic Auth๋ž€? nginx์—์„œ ๊ฐ€์žฅ ์†์‰ฝ๊ฒŒ ์‚ฌ์šฉ์ž ์ ‘๊ทผ์„ ์ œํ•œํ•˜๋Š” ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค. ๋งŒ

minholee93.tistory.com

 

 

 

 

 

 

Github Actions๋กœ .htpasswd ์ƒ์„ฑ

dev ์„œ๋ฒ„์—์„œ๋„ ๋ณด์•ˆ์„ ์‹ ๊ฒฝ์“ฐ๋Š” ๊ฒŒ ์ข‹์„ ๊ฒƒ ๊ฐ™๋‹ค๋Š” ์ƒ๊ฐ์ด ๋“ค์–ด์„œ ์Šคํ”„๋ง ํ”„๋กœ์ ํŠธ์— .htpasswd๋ฅผ ์ง์ ‘ ์ƒ์„ฑํ•˜์ง€ ์•Š์•˜๋‹ค.

Repository secrets์— ๋กœ์ปฌ์—์„œ ์ƒ์„ฑํ•œ ์•„์ด๋””์™€ ํŒจ์Šค์›Œ๋“œ๋ฅผ ๋“ฑ๋กํ•œ ํ›„, workflow์— .htpasswd ์ƒ์„ฑํ•ด์„œ Docker image ๋นŒ๋“œํ•˜๋Š” step์„ ์ถ”๊ฐ€ํ–ˆ๋‹ค.

 

1. .๋กœ์ปฌ์—์„œ htpasswd ์ƒ์„ฑ

# htpasswd ์„ค์น˜
# macOS
brew install httpd


# ์‚ฌ์šฉ์ž ์ถ”๊ฐ€ (๋น„๋ฐ€๋ฒˆํ˜ธ ํฌํ•จ)
htpasswd -cb .htpasswd {์•„์ด๋””} {ํŒจ์Šค์›Œ๋“œ} 

# ํŒŒ์ผ ํ™•์ธ
cat .htpasswd
// ํ˜•์‹: username:encrypted_password

 

 

2. Repository secrets ์ถ”๊ฐ€

Base64 ์ธ์ฝ”๋”ฉ ๋œ ์•„์ด๋””์™€ ํŒจ์Šค์›Œ๋“œ ๊ฐ’์„ ์‹œํฌ๋ฆฟ ๊ฐ’์— ์ถ”๊ฐ€ํ•ด์ค€๋‹ค.

cat .htpasswd | base64 | tr -d '\n'

 

 

3. workflow ์ˆ˜์ •

.htpasswd ์ƒ์„ฑํ•˜๋Š” step์„ ์ถ”๊ฐ€ํ•ด์ค€๋‹ค.

      - name: Create .htpasswd file from secrets
        run: |
          echo "${{ secrets.HTPASSWD_BASE64 }}" | tr -d '\n' | base64 -d > ./nginx/.htpasswd
          
	  - name: Build Nginx Docker image (DEV)
        uses: docker/build-push-action@v5
        with:
          context: .
          file: ./nginx/Dockerfile
          
       # .. ์ƒ๋žต

 

 

base64๋กœ ์ธ์ฝ”๋”ฉํ•ด์„œ ์ €์žฅํ–ˆ๋˜ ์•„์ด๋””์™€ ํŒจ์Šค์›Œ๋“œ๋ฅผ ๋””์ฝ”๋”ฉํ•˜์—ฌ ๋นŒ๋“œ ์ปจํ…์ŠคํŠธ์˜ nginx ๋””๋ ‰ํ„ฐ๋ฆฌ์— ์ƒ์„ฑํ•˜๋ฉด,

ํ•ด๋‹น ํŒŒ์ผ์„ ํฌํ•จํ•œ Nginx ์ด๋ฏธ์ง€๋ฅผ ๋นŒ๋“œํ•˜๊ฒŒ ๋œ๋‹ค. Dockerfile์—๋Š” ์•„๋ž˜ ๋ช…๋ น์–ด๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์–ด์•ผ ํ•œ๋‹ค.

 

COPY nginx/.htpasswd /etc/nginx/.htpasswd

 

 

๐Ÿ’ก Build Context : `docker build` ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ–ˆ์„ ๋•Œ ์ ‘๊ทผ ๊ฐ€๋Šฅํ•œ ํŒŒ์ผ์˜ ์ง‘ํ•ฉ

(์˜ค๋Š˜๋„ ๋А๊ผˆ์ง€๋งŒ Docker ๊ณต๋ถ€ ๋” ์—ด์‹ฌํžˆ ํ•ด์•ผ๊ฒ ๋‹ค ...  )

 

 

์ฐธ๊ณ  :

 

[Docker] Build Context

Build contextLearn how to use the build context to access files from your Dockerfiledocs.docker.com docker buildx buildโ€‹docker build ์œ„ ๋‘ ๋ช…๋ น์–ด๋ฅผ ์ˆ˜ํ–‰ํ•˜๋ฉด Dockerfile๊ณผ context๋กœ๋ถ€ํ„ฐ Docker ์ด๋ฏธ์ง€๊ฐ€ ๋งŒ๋“ค์–ด์ง„๋‹ค. Build Context๊ฐ€

mystudylog.tistory.com

 

 

 

์šฐ์—ญ๊ณก์ ˆ ๋์— dev ๋ฐฐํฌ ์„ฑ๊ณตํ•˜๊ณ  ์›ํ•˜๋˜ ๋Œ€๋กœ ๋ณ„๋„์˜ ๋กœ๊ทธ์ธ์„ ํ†ตํ•ด Swagger UI์— ์ ‘๊ทผ ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๊ตฌํ˜„ํ–ˆ๋‹ค. โœŒ๐Ÿป

์ €์ž‘์žํ‘œ์‹œ ๋น„์˜๋ฆฌ ๋ณ€๊ฒฝ๊ธˆ์ง€ (์ƒˆ์ฐฝ์—ด๋ฆผ)

'Today I Learned ๐Ÿง' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[TIL-20260131] Docker ์ด๋ฏธ์ง€ ๋‹ค๋ฃจ๊ธฐ  (0) 2026.01.31
[TIL-20260129] Docker ์ปจํ…Œ์ด๋„ˆ ๋‹ค๋ฃจ๊ธฐ  (0) 2026.01.30
[TIL-20260127] @AuthenticationPrincipal , Swagger JWT ์ธ์ฆ ์„ค์ •  (0) 2026.01.27
[TIL-20260124] Spring Batch Reader ๊ตฌํ˜„  (0) 2026.01.24
[TIL-20260122] ํ™˜๊ฒฝ์— ๋”ฐ๋ฅธ ๊ฐ’ ์„ค์ •ํ•˜๊ธฐ (Spring Environment, Kotlin buildList)  (0) 2026.01.22
'Today I Learned ๐Ÿง' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
  • [TIL-20260131] Docker ์ด๋ฏธ์ง€ ๋‹ค๋ฃจ๊ธฐ
  • [TIL-20260129] Docker ์ปจํ…Œ์ด๋„ˆ ๋‹ค๋ฃจ๊ธฐ
  • [TIL-20260127] @AuthenticationPrincipal , Swagger JWT ์ธ์ฆ ์„ค์ •
  • [TIL-20260124] Spring Batch Reader ๊ตฌํ˜„
ํ•ด๋‹ˆ ๐ŸŒฑ
ํ•ด๋‹ˆ ๐ŸŒฑ
๊ธฐ๋ก์ด ์ž์‚ฐ์ด๋‹ค ( •ฬ€แด—•ฬ )ูˆโœ๏ธ
  • ํ•ด๋‹ˆ ๐ŸŒฑ
    haeni.dev
    ํ•ด๋‹ˆ ๐ŸŒฑ
  • ๋งํฌ

    • github
    • velog
  • ์ „์ฒด
    ์˜ค๋Š˜
    ์–ด์ œ
    • ๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ (25)
      • ์šฐ์‚ฌ๊ธฐ ๊ฐœ๋ฐœ์ผ์ง€ ๐Ÿฐ (4)
      • Today I Learned ๐Ÿง (19)
      • ๋ถ„๋…ธ์˜ ํƒ€์ดํ•‘ ๋กœ๊ทธ ๐Ÿ”ฅ (2)
  • ๋ธ”๋กœ๊ทธ ๋ฉ”๋‰ด

    • ํ™ˆ
    • ํƒœ๊ทธ
    • ๋ฐฉ๋ช…๋ก
  • ๊ณต์ง€์‚ฌํ•ญ

  • ์ธ๊ธฐ ๊ธ€

  • ํƒœ๊ทธ

    AWS
    ๊ฐœ๋ฐœ์ž
    ๊ฐœ๋ฐœ
    ๋ฐฑ์—”๋“œ
    ์ฝ”๋”ฉํ…Œ์ŠคํŠธ
    ์ฝ”ํ…Œ
    ci/cd
    IT
    til
    springboot
  • ์ตœ๊ทผ ๋Œ“๊ธ€

  • ์ตœ๊ทผ ๊ธ€

  • hELLOยท Designed By์ •์ƒ์šฐ.v4.10.5
ํ•ด๋‹ˆ ๐ŸŒฑ
[TIL-20260128] Nginx Basic Auth, Github Actions๋กœ .htpasswd ์ƒ์„ฑ
์ƒ๋‹จ์œผ๋กœ

ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”