1. pfx 파일을 crt 및 rsa로 변환 - convert pfx file to crt and rsa.

 $ openssl pkcs12 -in ssl.mysite.com.pfx  -clcerts -nokeys -out ssl.mysite.com.crt
 $ openssl pkcs12 -in ssl.mysite.com.pfx -nocerts -nodes -out ssl.mysite.com.rsa


2. crt rsa파일 복사 - copy crt and rsa file to NGINX_HOME/conf/ssl/

C:\Users\fehead> dir /w C:\nginx\conf\ssl

C:\nginx\conf\ssl
[.]                 [..]                ssl.mysite.com.crt   ssl.mysite.com.rsa
C:\Users\fehead>




3. nginx config 파일 설정 - set nginx config file.

######################################################################################################################################################
### nginx config.

# tomcat

upstream    tomcat {
    server    127.0.0.1:8080    fail_timeout=0;
}

# ssl.mysite.com https setting
server {
        server_name ssl.mysite.com;

        location / {
                proxy_redirect off;
                proxy_pass_header Server;

                proxy_set_header Host $http_host;
                proxy_set_header X-Forwarded-Proto $scheme;
                proxy_set_header X-Forwarded-Port $server_port;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                proxy_set_header X-Real-IP $remote_addr;
                proxy_set_header X-Scheme $scheme;
                proxy_pass http://tomcat;
                charset utf-8;
        }

    listen [::]:443 ssl;
    listen 443 ssl;
    ssl on;
    ssl_certificate    ssl/ssl.mysite.com.crt;
    ssl_certificate_key    ssl/ssl.mysite.com.rsa;

}


# ssl.mysite.com SSL redirect
server {
    listen 80;
    listen [::]:80;

    server_name ssl.mysite.com;   

    return 301 https://$host$request_uri;   
}


# Etc Site
server {
    listen 80;
    listen [::]:80;

    server_name etc.mysite.com;   
    ...

}



4. test nginx config

C:\nginx>nginx.exe -t
nginx: the configuration file C:\nginx/conf/nginx.conf syntax is ok
nginx: configuration file C:\nginx/conf/nginx.conf test is successful

C:\nginx>


5. restart nginx


C:\nginx>nginx.exe -s reload


* GetTickCount는 시스템이 시작되고 나서의 시간을 밀리 초로 반환하는 함수입니다.

* GetTickCount는 시스템이 시작되고 나서 49.7일이 지나면 0에서 다시 시작합니다.

 * GetTickCount가 오버플로우되어 0으로 값이 설정되었더라도 예전값과 - 연산을 해도 크게 지장은 없습니다.
  DWORD 형이 부호가 없기 때문에  현재값 - 예전값 은 49.7일 이전 값이 아니면 옳은 값을 반환합니다.

** 0x00000001 - 0x00000000 = 1
** 0x00000000 - 0xFFFFFFFF = 0x00000000 + (0xFFFFFFFF 2의보수) = 0x00000000 + (0x00000001) = 1


 간단하게 4bit 로 계산을 해보겠습니다.

4bit의 최대값은
1111 (2진수) == 15(10진수)

4bit의 최소값은
0000 (2진수) == 0(10진수)

최소값 - 최대값 을 계산해보면
1111의 2의 보수값은
1111의 역수 0000 더하기 1 = 0001

2진수) 0000 - 1111 = 0000 + 0001 = 0001
10진수) 0 - 15 = 0 + 1 = 1

따라서 값은 1이 나온다.

마찬가지로 5 - 15(4비트 최대값)는 6이 된다.
0101 - 1111 = 0101 + 0001 = 0110(6)

14 - 15 = 15
14 - 15(4비트 최대값) = 1110 - 1111 = 1110 + 0001 = 1111(15)


http://studiostyl.es/schemes

여기 visual c++ 버전별 여러가지 스타일이 있다.

도구 --> 설정 가져오기및 내보내기 메뉴로 가서 설정을 적용해보자.




링크 에러

LINK : warning LNK4098: defaultlib 'MSVCRT' conflicts with use of other libs; use /NODEFAULTLIB:library

해결책
환경 설정  --> Linker --> Input -->Ignore Specific Library

msvcrt.lib

입력 후 리빌드.

Tip : 링커 command line 에 /VERBOSE:LIB 를 추가하면 링커가 검색중인 라이브러리가 보인다.

아래 처럼 Visual Studio 2008 에서

솔류션 탐색기에 현재 편집중인 파일위치를 알수 있게 해준다.

지인 사이트 KeyTol 블로그 에서 발췌하였다^^




옵션은 아래를 참고^^


간단하게 디렉토리를 압축할수 있게하는 라이브러리이다.

http://joyholic.kr/trackback/32


위 사이트를 참고하여
Zlib( http://www.winimage.com/zLibDll/index.html )
MiniZip( http://www.winimage.com/zLibDll/minizip.html )
zipunzip 라이브러리( http://www.codeproject.com/KB/cpp/zipunzip.aspx )

사이트에 가서 해당 소스를 가져와 소스를 합치고 해서 visual c++ 2008에서 컴파일 했다.

파일은 두개인데
한개는 ZipUnzip 라이브러리 파일이고
한개는 ZipUnzip라이브러리를 사용한 샘플파일( 위사이트에서 참고한 파일 )이다.

사용법은 아래와 같다.


// DirectoryZip  --- c:\tmp 디렉토리를 c:\tmp.zip 으로 압축
        CZipper zip;

        if (zip.OpenZip("c:\\tmp.zip", false))
                zip.AddFolderToZip("c:\\tmp", false);

// FileZip --- c:\tmp\test.txt 파일을 c:\tmp.zip 으로 압축
        CZipper zip;

        if (zip.OpenZip("c:\\tmp.zip", false))
                zip.AddFileToZip("c:\\tmp\\text.txt", false);

// Unzip --- c:\tmp.zip 을 c:\tmp에 압축해제
        CUnzipper uz;
        bool br = uz.OpenZip("c:\\tmp.zip");
        if(br)
                br = uz.UnzipTo("c:\\tmp");
아래 샘플 코드의 실행 방법은 인자를 붙여 실행합니다.
 ZipUnzip.exe c C:\tmp  ==> c:\tmp 디렉토리를 압축하여 c:\tmp.zip 파일을 만든다.
 ZipUnzip.exe d C:\tmp ==> c:\tmp.zip 파일을 압축해제하여 c:\tmp에 압축을 푼다.

첨부 파일을 참고 하세요.



/// @brief    파일이나 디렉토리가 있는지 확인.
bool IsExist(const string & file);

// 파일 경로와 관계된 모든 부모 디렉토리를 만든다.
bool DigPath( const string & fullPath );

// 디렉토리인지 알아냄.
bool IsDirectory( const string & path );

// 조건 1. src_file 및 dst_file은 풀 파일명이여야 함.
bool FileCopy(const string & src_file, const string & dst_file);

bool FileMove(const string & src_file, const string & dst_file);

bool CopyDir(const string & src_dir, const string & dst_dir, const bool src_remove);

bool MoveDir( const string & src_dir, const string & dst_dir );

// . .. 디렉토리인지 검사.
bool IsDotDirectory( const string & x );

/// @brief    파일인지 검사함.
bool IsFile(const string & src);


  1. 연결
    1. SQLAllocHandle(SQL_HANDLE_DBC, COdbcEnv::GetHandle(), &hdbc)
    2. // 네트워크 불안정 시 select() 또는 poll() 에서 발생할 수 있는 blocking을 방지하기 위한 timeout 값 설정
      SQLSetConnectAttr(hdbc, SQL_ATTR_CONNECTION_TIMEOUT, reinterpret_cast<SQLPOINTER>(ODBC_TIMEOUT), SQL_IS_UINTEGER)
    3. // ODBC연결
      SQLConnect(hdbc,     reinterpret_cast<SQLCHAR*>(szDSN), SQL_NTS,
                                      reinterpret_cast<SQLCHAR*>(szUsr), SQL_NTS,
                                      reinterpret_cast<SQLCHAR*>(szPwd), SQL_NTS)
    4. // STMT 할당
      SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt)
    5. // 퀘리 타임아웃 설정.
      DWORD dwQueryTimeOut = ODBC_TIMEOUT; // ODBC_TIMEOUT = 20
      SQLSetStmtAttr(hstmt, SQL_ATTR_QUERY_TIMEOUT, reinterpret_cast<SQLPOINTER>(dwQueryTimeOut), SQL_IS_UINTEGER)

  2. Bind 바인드
    1. SQLBindCol(hstmt, col, type, buf, bufLen, &Len))

  3. 트랜젠션 시작
    1. // 오토 커밋 비활성화
      SQLSetConnectAttr( hdbc, SQL_ATTR_AUTOCOMMIT, (SQLPOINTER)SQL_AUTOCOMMIT_OFF, 0 )

  4. 쿼리 설정
    1. SQLExecDirect(hstmt, szQuery, SQL_NTS)

  5. Commit or Rollback
    1. Commit
      1. SQLEndTran(SQL_HANDLE_DBC, hdbc, SQL_COMMIT)
    1. Rollback
      1. SQLEndTran(SQL_HANDLE_DBC, hdbc, SQL_ROLLBACK)

  6. 리셋
    1. // 오토커밋 설정
      SQLSetConnectAttr( hdbc, SQL_ATTR_AUTOCOMMIT, (SQLPOINTER)SQL_AUTOCOMMIT_ON, 0 )

  7. 닫기
    1. SQLFreeHandle(SQL_HANDLE_DBC, hstmt)
    2. SQLDisconnect(hdbc)
    3. SQLFreeHandle(SQL_HANDLE_DBC, hdbc)

  1. Connect .
    1. SQLAllocHandle( SQL_HANDLE_DBC, ... ) 함수 호출후 아래 함수 호출
    2. SQLSetConnectAttr( m_hdbc, SQL_ATTR_AUTOCOMMIT, (SQLPOINTER)SQL_AUTOCOMMIT_OFF, 0 );

  2. Commit
    1. SQL실행후 SQLCloseCursor 호출전에 아래 함수 호출.
    2. 아래 Rollback과 같이 호출하면 안됨.
    3. SQLEndTran(SQL_HANDLE_DBC, m_hdbc, SQL_COMMIT);

  3. Rollback
    1. SQL실행후 SQLCloseCursor 호출전에 아래 함수 호출.
    2. 위 Commit과 같이 호출하면 안됨.
    3. SQLEndTran(SQL_HANDLE_DBC, m_hdbc, SQL_ROLLBACK);


풀소스
나중에 정리하겠음. 아래 첨부파일 있습니다.
개발 환경
visual c++ 2008
/*
   minizip.cpp
   Version 1.01e, February 12th, 2005

   Copyright (C) 1998-2005 Gilles Vollant

   minizip 간략화버전
// 참고자료 : http://www.winimage.com/zLibDll/minizip.html
   작성자 : fehead.tistory.com
   사용법 : minizip.exe 생성할압축파일명 압축할파일1 압축할파일2 ... 압축할파일N
   예제   : minizip.exe test.zip test.txt text2.txt
*/

#include  < stdio.h > 
#include  < stdlib.h > 
#include  < string.h > 
#include  < time.h > 
#include  < errno.h > 
#include  < fcntl.h > 
#include  < direct.h > 
#include  < io.h > 

#include "minizip/zip.h"
#include "minizip/iowin32.h"

uLong filetime(
    const char *f,                /* name of file to get info on */
    tm_zip *tmzip,             /* return value: access, modific. and creation times */
    uLong *dt              /* dostime */
    )
{
  int ret = 0;
  {
      FILETIME ftLocal;
      HANDLE hFind;
      WIN32_FIND_DATA  ff32;

      hFind = FindFirstFile(f,&ff32);
      if (hFind != INVALID_HANDLE_VALUE)
      {
        FileTimeToLocalFileTime(&(ff32.ftLastWriteTime),&ftLocal);
        FileTimeToDosDateTime(&ftLocal,((LPWORD)dt)+1,((LPWORD)dt)+0);
        FindClose(hFind);
        ret = 1;
      }
  }
  return ret;
}

int main(int argc, char * argv[] )
{
    char    filename_try[128] = {'\0', };
    strncpy( filename_try, argv[1], sizeof(filename_try) );
    filename_try[sizeof(filename_try)-1] = 0;

    zlib_filefunc_def ffunc;
    fill_win32_filefunc(&ffunc);
    zipFile zf = zipOpen2(filename_try, 0, NULL, &ffunc);

    if (zf == NULL)
    {
        printf("error opening %s\n",filename_try);
        return 1;
    }
    printf("creating %s\n",filename_try);

    char    buf[4086];
    int err = ZIP_OK;
    for (int i = 2 ;(i < argc) && (err==ZIP_OK);i++)
    {
        int size_read;
        const char* filenameinzip = argv[i];
        zip_fileinfo zi = { 0, };

        filetime(filenameinzip, &zi.tmz_date, &zi.dosDate);

        err = zipOpenNewFileInZip3(zf, filenameinzip,&zi,
                         NULL,0,NULL,0,NULL /* comment*/,
                         Z_DEFLATED,
                         Z_DEFAULT_COMPRESSION, 0,
                         /* -MAX_WBITS, DEF_MEM_LEVEL, Z_DEFAULT_STRATEGY, */
                         -MAX_WBITS, DEF_MEM_LEVEL, Z_DEFAULT_STRATEGY,
                         NULL, 0);

        if (err != ZIP_OK)
        {
            printf("error in opening %s in zipfile\n",filenameinzip);
            return 1;
        }

        FILE * fin = fopen(filenameinzip,"rb");
        if (fin==NULL)
        {
            err=ZIP_ERRNO;
            printf("error in opening %s for reading\n",filenameinzip);
            return 1;
        }

        do
        {
            err = ZIP_OK;
            size_read = (int)fread(buf,1,sizeof(buf),fin);
            if (size_read  <  sizeof(buf))
                if (feof(fin)==0)
            {
                printf("error in reading %s\n",filenameinzip);
                err = ZIP_ERRNO;
            }

            if (size_read > 0)
            {
                err = zipWriteInFileInZip(zf,buf,size_read);
                if (err < 0)
                {
                    printf("error in writing %s in the zipfile\n",
                                     filenameinzip);
                }

            }
        } while ((err == ZIP_OK) && (size_read > 0));

        fclose(fin);

        zipCloseFileInZip(zf);
    }
    
    zipClose(zf,NULL);

    return 0;
}
파일첨부

+ Recent posts