Nginx 에서 Proxy 구성시 Arguments 사용하기

리눅스/APACHE|2024. 12. 12. 12:35
반응형

Nginx 를 프록시 서버로 만들건데, Backend 서버를 내가 원하는 IP 로 접속하는 예제 입니다.

Client 에서는 Backend 서버에 직접 접속이 안되기 때문에, 프록시 서버를 이용하는 것입니다.

 

- 접속예 : http://www.sysdocu.kr/?url=192.168.10.2

- 192.168.10.2 사설 IP 를 가진 서버에 www.sysdocu.kr  이라는 프록시 서버를 이용해 접근합니다. (통신, 트래픽 흐름)

 

nginx.conf 파일에서 서버 구성내용을 아래와 같이 수정합니다.

아래 예시에서는 upstream 없이 구성하였습니다.

url 값은 arg_url 로 받아야 합니다.

 

# vi /etcc/nginx/nginx.conf

...

    ###################################
    server {
        listen 80;
        server_name www.sysdocu.kr;

        # 404 에러 페이지 (선택, 404 출력 파일의경로와 파일명 입력)

        location = /custom_404.html {

            root /etc/nginx;

            internal;

        }

 

        location / {
            set $backend "http://$arg_url";
            proxy_pass $backend;
            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 Connection "";
        }
    }
    ###################################

...

 

# systemctl restart nginx

 

반응형

댓글()

안드로이드 java 에서 웹페이지 출력 내용을 String 에 넣기

프로그래밍/Android (Java)|2024. 11. 30. 22:39
반응형

(onCreate 안에서)

 

        // 웹페이지의 내용을 가져오기
        new Thread(() -> {
            // AtomicReference 사용
            AtomicReference<String> webContent = new AtomicReference<>("");

            // fetchWebPage 결과를 AtomicReference에 저장
            webContent.set(fetchWebPage("https://sysdocu.tistory.com/list.html"));

            runOnUiThread(() -> {
                // UI 스레드에서 Toast 실행
                Toast.makeText(MainActivity.this, webContent.get(), Toast.LENGTH_SHORT).show();
            });
        }).start();

 

 

(onCreate 밖에 같은 레벨에서)


    // 웹페이지 json 코드 가져오기
    private String fetchWebPage(String urlString) {
        String result = "";
        OkHttpClient client = new OkHttpClient();
        // 요청 객체 생성
        Request request = new Request.Builder()
                .url(urlString)
                .build();
        try {
            // 요청 실행 및 응답 받기
            Response response = client.newCall(request).execute();
            if (response.isSuccessful()) {
                result = response.body().string(); // 응답 내용을 String으로 변환
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
        return result;
    }

반응형

댓글()

ffmpeg 명령어로 포맷 변환 예제 (mkv to mp4, mp4 to mp3)

리눅스/OS 일반|2024. 11. 1. 18:47
반응형

ffmpeg 명령으로 할 수 있는것은 다양하지만, 필자의 필요에 의해서 아래 내용만 기록해 둡니다. 

 

 

1. mkv to mp4

 

# ffmpeg -i example.mkv -c:v copy -c:a copy example.mp4

 

입력 파일 : example.mkv

출력 파일 : example.mp4

 

위 옵션 사용시 비디오 및 오디오 스트림이 원본 품질로 유지됩니다.

이 방식은 매우 빠르고 효율적이며, 데이터 손실이 없습니다.

 

 

2. mp4 to mp3

 

영상에서 오디오만 추출이 가능합니다.

 

# ffmpeg -i input.mp4 -q:a 0 -map a output.mp3

 

-i input.mp4 : 입력 MP4 파일

-q:a 0 : 오디오 품질을 최상으로 설정 (-q:a 0 대신에 -b:a 128k 와 같이 비트레이트 지정 가능)

-map a : 오디오 스트림만 추출

output.mp3 : 출력 MP3 파일 이름

 

특정 시간대의 오디오만 추출하려면 -ss (시작 시간) 와 -t (지속 시간) 를 추가합니다.

 

# ffmpeg -ss 00:01:00 -i input.mp4 -to 00:00:30 -q:a 0 -map a output.mp3

 

-ss 00:01:00 : 추출 시작 시간 (1분 0초)

-t 00:00:30 : 추출 지속 시간 (0분 30초)

-q:a 0 : 오디오 품질을 최상으로 설정 (-q:a 0 대신에 -b:a 128k 와 같이 비트레이트 지정 가능)

빠른 처리를 위해 -ss 옵션을 입력 파일 앞에 배치 하였습니다.

  이 경우, ffmpeg는 해당 시간대부터 직접 처리하므로 더욱 빠릅니다.

- mp4 말고 오디오파일 mp3 에서 부분 추출도 가능합니다.

 

반응형

댓글()

VideoJS 로 웹페이지에서 동영상 플레이어 사용하기

반응형

소스코드는 굉장히 단순합니다.

아래 옵션중 vjs-big-play-centered 는 플레이 버튼을 중앙에 두며, 미설정시 좌측 상단에 버튼이 위치합니다.

스마트폰에서 재생 버튼이 느리게 동작되어 영상을 다운로드 후 재생하는 듯 보인다면 웹서버에 H.264 모듈을 설치하여 스트리밍이 가능합니다.

 

<head>
        <meta charset="UTF-8">
        <link href="https://cdnjs.cloudflare.com/ajax/libs/video.js/7.10.2/video-js.min.css" rel="stylesheet" />

        <script src="https://cdnjs.cloudflare.com/ajax/libs/video.js/7.10.2/video.min.js"></script>

</head>


<body>
<video id="my-video" 

class="video-js vjs-big-play-centered

controls 

preload="auto" 

width="320

height="180

data-setup='{
"autoplay": true
}'>
        <source src="The.mkv" type='video/mp4'>

        <track kind="subtitles" src="The.vtt" srclang="ko" label="Korean" default />

</video>

</body>

 

 

* 참고 (SRT -> VTT 자막 변경 명령어)

아래 3가지만 고치면 되지만, 번거로우므로 명령어를 사용합니다.

- 시간 정보에 , (콤마) 대신 . (점)

- 자막 순번 제거

- 맨 위에 WEBVTT 라고 명시

# ffmpeg -i The.srt The.vtt

반응형

댓글()

Ubuntu 24.04 GNOME 46 Orchis 테마 적용하기

리눅스/OS 일반|2024. 9. 26. 13:53
보호되어 있는 글입니다.
내용을 보시려면 비밀번호를 입력하세요.

Ubuntu 24.04 Desktop 에서 Samsung SL-J3560FW 프린터 잡기

리눅스/OS 일반|2024. 9. 25. 09:31
반응형

프린터 설정에서 프린터를 추가할때 Samsung SL-J3560FW 모델과 동일한 드라이버가 출력되지 않고, 삼성 홈페이지에서 조차 리눅스용 드라이버를 제공하지 않습니다.

이러한 환경에서 아래 드라이버를 선택하여 설치하였더니 잘 되는 것으로 확인 했습니다.

 

- 설정 > 프린터 > [프린터 추가] > 하단 검색창에 프린터 IP 입력

 

조금 기다리면 아래 세가지 항목이 선택항목으로 출력됩니다.

-  JetDirect

- LPD

- SL-J3560FW

 

여기에서 올바른 모델명을 선택하여 진행하면 인쇄시 글씨가 깨져 출력되므로,

JetDirect 를 선택, [추가] 하고 아래 모델명을 찾아 설치합니다.

- 제조사 : Hewlett-Packard

- 드라이버 : HP Business Inkjet 110, hpcups 3.23.12

 

반응형

댓글()

간단한 리눅스 백업 스크립트 적용하기

리눅스/OS 일반|2024. 9. 19. 08:58
반응형

백업본을 저장할 디렉토리를 생성합니다.

# mkdir /backup

 

백업 스크립트를 생성합니다.

필요에 따라 아래 내용을 수정하여 사용하면 됩니다.

# vi /root/backup.sh

#!/bin/bash

# 오래된 파일 및 디렉토리 삭제
find "/backup/" -type f -mtime +5 -exec rm -f {} \;
find "/backup/" -type d -mtime +5 -exec rm -rf {} \;

# 오늘자 백업 디렉토리 생성
today=$(date +%Y%m%d)
mkdir -p /backup/${today}

# 홈페이지 소스 및 DB 백업
cd /home/sysdocu/
tar cvzf /backup/${today}/public_html.tar.gz public_html
mysqldump -uroot -p12345678 --all-databases > /backup/${today}/all.sql

# 시스템 기본 설정 파일 백업
cd /backup/${today}
cp -arp /etc/iptables/rules.v4 .
cp -arp /etc/crontab .
cp -arp /root/backup.sh .

 

# chmod 700 /root/backup.sh

 

백업 스크립트를 매일 04시에 실행되도록 스케쥴러에 등록합니다.

# echo "0 4 * * * root sh /root/backup.sh" >> /etc/crontab

 

반응형

댓글()

Ubuntu 24.04 vsftpd 설치 및 기본 설정

리눅스/FTP|2024. 9. 13. 14:44
반응형

설치는 아래와 같습니다.
# apt -y install vsftpd

시스템 계정으로 로그인하여 파일 업로드를 사용하기 위해서는 아래 옵션으로 바꿔주어야 합니다.
# vi /etc/vsftpd.conf

# 익명 접근 차단
anonymous_enable=NO

# 로컬 사용자 계정에 대한 FTP 접속 및 쓰기 허용
local_enable=YES
write_enable=YES

# 사용자 홈 디렉토리 상위 디렉토리 이동 차단
chroot_local_user=YES
allow_writeable_chroot=YES

# 패시브 모드 설정 : 지정한 포트 범위로 데이터 전송 (방화벽에 포트 추가 필요)
pasv_enable=YES
pasv_min_port=50001
pasv_max_port=50005


수정 내용은 데몬을 재시작하여 적용합니다.
# systemctl restart vsftpd

반응형

댓글()

Ubuntu 24.04 에서 APM 설치 및 Let's Encrypt SSL 적용하기 (사이트 기본 구성)

리눅스/APACHE|2024. 9. 13. 11:54
반응형

가장 기본적인 APT 패키지 관리툴로 설치를 진행합니다.

 

 

1. APM 설치

 

# apt-get -y update

# apt-get -y upgrade

# apt-get -y install apache2

# apt-get -y install php8.3 php8.3-mysql

# apt-get -y install mysql-server

# vi /etc/apache2/mods-available/mime.conf

# 아래 내용 추가
AddType application/x-httpd-php .php .htm .html
AddType application/x-httpd-php-source .phps 

 

# vi /etc/php/8.3/apache2/php.ini

; 수정 및 추가
short_open_tag = On
extension=mysqli
extension=pdo_mysql

 

# systemctl restart apache2

 


2. Virtualhost 설정

 

# cd /etc/apache2/sites-enabled

# vi default-ssl.conf

# 추가
ServerName sysdocu.kr
ServerAlias www.sysdocu.kr

 

# vi /etc/apache2/apache2.conf

# /var/www 디렉토리 설정을 찾아서 아래와 같이 수정, 디렉토리가 다를때는 추가
<Directory "/var/www/*">
    Options Indexes FollowSymLinks
    AllowOverride All
    Require all granted
</Directory>

# 404 에러 출력시 웹서버 버전 정보 숨기기
ServerSignature Off
ServerTokens Prod

 

# systemctl restart apache2

 

 

3. Let's Encrypt SSL 설정

 

# apt -y install letsencrypt

# letsencrypt certonly -a webroot --agree-tos -m admin@sysdocu.kr -w /var/www/html -d www.sysdocu.kr --rsa-key-size 4096

 

자동 갱신 설정을 합니다.

# vi /root/ssl-renew.sh

#!/bin/bash
/usr/bin/letsencrypt certonly -a webroot --agree-tos --renew-by-default -w /var/www/html -d www.sysdocu.kr
systemctl restart apache2

 

# chmod 700 /root/ssl-renew.sh

# echo "0 0 1,16 */2 * root sh /root/ssl-renew.sh" >> /etc/crontab

 

 

4. SSL 설정

 

# cd /etc/apache2/sites-enabled

# ln -s ../sites-available/default-ssl.conf .

# vi 000-default.conf

# 추가
ServerName sysdocu.kr
ServerAlias www.sysdocu.kr


# 수정
SSLCertificateFile            /etc/letsencrypt/live/www.sysdocu.kr/cert.pem
SSLCertificateKeyFile    /etc/letsencrypt/live/www.sysdocu.kr/privkey.pem
SSLCertificateChainFile /etc/letsencrypt/live/www.sysdocu.kr/fullchain.pem 

 

# a2enmod ssl

# systemctl restart apache2

 

 

5. SSL Redirect 설정

 

# a2enmod rewrite

# systemctl restart apache2

# cd /var/www/html

# vi .htaccess

RewriteEngine On
RewriteCond %{SERVER_PORT} 80
RewriteRule ^(.*)$ https://www.sysdocu.kr/$1 [R,L]

 

 

6. MySQL 설정

 

MySQL root 패스워드 설정 및 사용자 추가 방법입니다.

 

# mysql -p

(처음에는 패스워드가 없습니다. 그냥 엔터)

 

mysql> use mysql;

mysql> alter user root@localhost identified by '12345678';

mysql> flush privileges; 

 

새 데이터베이스와 계정 생성 후 권한을 부여 합니다.

mysql> create database sysdb;

mysql> create user 'sysuser'@'localhost' identified by '12345678';
mysql> grant all privileges on sysdb.* to 'sysuser'@'localhost';
mysql> flush privileges;

 

테스트를 위해 웹소스 루트 디렉토리 (/var/www/html) 에서 MySQL 계정을 이용한 접속 테스트 PHP 소스 코드를 작성합니다.

# vi test.php

<?
define("DB_HOST", "localhost");
define("DB_USER", "sysuser");
define("DB_PASSWORD", "12345678");
define("DB_NAME", "sysdb");
$conn = mysqli_connect(DB_HOST, DB_USER, DB_PASSWORD, DB_NAME);
if (!$conn) {
    die("Connection failed: " . mysqli_connect_error());
}

$query = "SELECT VERSION()";
$result = mysqli_query($conn, $query);
$row = mysqli_fetch_array($result);
echo "version: " . $row[0];

mysqli_close($conn);
?>

 

웹브라우저를 통해 작성한 PHP 파일에 접근하면 MySQL 과 잘 연동되고 계정이 올바를 경우 아래와 같은 메세지가 출력됩니다.

여기에서는 간단히 curl 을 이용해 테스트 해보겠습니다.

# curl https://www.sysdocu.kr/test.php

version: 8.0.39-0ubuntu0.24.04.2

 

반응형

댓글()

Ubuntu 24.04 에 Prometheus + Grafana 설치하기 (GPU 포함)

리눅스/OS 일반|2024. 9. 5. 11:43
보호되어 있는 글입니다.
내용을 보시려면 비밀번호를 입력하세요.

RockyLinux 9 에 Prometheus + Grafana 설치하기 (GPU 포함)

리눅스/OS 일반|2024. 9. 3. 16:08
보호되어 있는 글입니다.
내용을 보시려면 비밀번호를 입력하세요.