Ecoer Logo
VOTING POWER100.00%
DOWNVOTE POWER100.00%
RESOURCE CREDITS100.00%
REPUTATION PROGRESS9.24%
Net Worth
0.296USD
STEEM
0.001STEEM
SBD
0.000SBD
Effective Power
6.133SP
├── Own SP
5.101SP
└── Incoming Deleg
+1.031SP

Detailed Balance

STEEM
balance
0.001STEEM
market_balance
0.000STEEM
savings_balance
0.000STEEM
reward_steem_balance
0.000STEEM
STEEM POWER
Own SP
5.101SP
Delegated Out
0.000SP
Delegation In
1.031SP
Effective Power
6.133SP
Reward SP (pending)
0.000SP
SBD
sbd_balance
0.000SBD
sbd_conversions
0.000SBD
sbd_market_balance
0.000SBD
savings_sbd_balance
0.000SBD
reward_sbd_balance
0.000SBD
{
  "balance": "0.001 STEEM",
  "savings_balance": "0.000 STEEM",
  "reward_steem_balance": "0.000 STEEM",
  "vesting_shares": "8297.027008 VESTS",
  "delegated_vesting_shares": "0.000000 VESTS",
  "received_vesting_shares": "1677.459086 VESTS",
  "sbd_balance": "0.000 SBD",
  "savings_sbd_balance": "0.000 SBD",
  "reward_sbd_balance": "0.000 SBD",
  "conversions": []
}

Account Info

namefureweb
id635498
rank199,675
reputation79277691714
created2018-01-21T12:08:27
recovery_accountsteem
proxyNone
post_count16
comment_count0
lifetime_vote_count0
witnesses_voted_for0
last_post2018-04-03T23:19:33
last_root_post2018-02-22T04:23:51
last_vote_time2018-04-02T14:59:00
proxied_vsf_votes0, 0, 0, 0
can_vote1
voting_power0
delayed_votes0
balance0.001 STEEM
savings_balance0.000 STEEM
sbd_balance0.000 SBD
savings_sbd_balance0.000 SBD
vesting_shares8297.027008 VESTS
delegated_vesting_shares0.000000 VESTS
received_vesting_shares1677.459086 VESTS
reward_vesting_balance0.000000 VESTS
vesting_balance0.000 STEEM
vesting_withdraw_rate0.000000 VESTS
next_vesting_withdrawal1969-12-31T23:59:59
withdrawn0
to_withdraw0
withdraw_routes0
savings_withdraw_requests0
last_account_recovery1970-01-01T00:00:00
reset_accountnull
last_owner_update1970-01-01T00:00:00
last_account_update2018-01-22T07:03:00
minedNo
sbd_seconds0
sbd_last_interest_payment2021-03-27T14:01:15
savings_sbd_last_interest_payment1970-01-01T00:00:00
{
  "active": {
    "account_auths": [],
    "key_auths": [
      [
        "STM5Qpzye4kiA4HjaP5CnqeYbcdPWGS78EzryBhPkfQPqqjSsCWKp",
        1
      ]
    ],
    "weight_threshold": 1
  },
  "balance": "0.001 STEEM",
  "can_vote": true,
  "comment_count": 0,
  "created": "2018-01-21T12:08:27",
  "curation_rewards": 0,
  "delegated_vesting_shares": "0.000000 VESTS",
  "downvote_manabar": {
    "current_mana": 2493621524,
    "last_update_time": 1743859593
  },
  "guest_bloggers": [],
  "id": 635498,
  "json_metadata": "{\"profile\":{\"profile_image\":\"https://us.v-cdn.net/6030588/uploads/userpics/593/pYJVW1N7GLYZ9.png\",\"name\":\"fureweb\",\"location\":\"Seoul\",\"website\":\"https://fureweb-com.github.io\"}}",
  "last_account_recovery": "1970-01-01T00:00:00",
  "last_account_update": "2018-01-22T07:03:00",
  "last_owner_update": "1970-01-01T00:00:00",
  "last_post": "2018-04-03T23:19:33",
  "last_root_post": "2018-02-22T04:23:51",
  "last_vote_time": "2018-04-02T14:59:00",
  "lifetime_vote_count": 0,
  "market_history": [],
  "memo_key": "STM8iPJ3gKittsH9Ae8uLDzXHzpv2n56dd9iKt8Z1P4TS775rsaAD",
  "mined": false,
  "name": "fureweb",
  "next_vesting_withdrawal": "1969-12-31T23:59:59",
  "other_history": [],
  "owner": {
    "account_auths": [],
    "key_auths": [
      [
        "STM6nQ64PzsSeiqufnvCT1PUfnoFh9JhyCuYw2tPwFfXx5RpuytMB",
        1
      ]
    ],
    "weight_threshold": 1
  },
  "pending_claimed_accounts": 0,
  "post_bandwidth": 0,
  "post_count": 16,
  "post_history": [],
  "posting": {
    "account_auths": [],
    "key_auths": [
      [
        "STM7Hf9eLLqTmJkgcUqPkVh1mY8NDoiMwZobTEZwU6ydEDe5bMGQf",
        1
      ]
    ],
    "weight_threshold": 1
  },
  "posting_json_metadata": "{\"profile\":{\"profile_image\":\"https://us.v-cdn.net/6030588/uploads/userpics/593/pYJVW1N7GLYZ9.png\",\"name\":\"fureweb\",\"location\":\"Seoul\",\"website\":\"https://fureweb-com.github.io\"}}",
  "posting_rewards": 7109,
  "proxied_vsf_votes": [
    0,
    0,
    0,
    0
  ],
  "proxy": "",
  "received_vesting_shares": "1677.459086 VESTS",
  "recovery_account": "steem",
  "reputation": "79277691714",
  "reset_account": "null",
  "reward_sbd_balance": "0.000 SBD",
  "reward_steem_balance": "0.000 STEEM",
  "reward_vesting_balance": "0.000000 VESTS",
  "reward_vesting_steem": "0.000 STEEM",
  "savings_balance": "0.000 STEEM",
  "savings_sbd_balance": "0.000 SBD",
  "savings_sbd_last_interest_payment": "1970-01-01T00:00:00",
  "savings_sbd_seconds": "0",
  "savings_sbd_seconds_last_update": "1970-01-01T00:00:00",
  "savings_withdraw_requests": 0,
  "sbd_balance": "0.000 SBD",
  "sbd_last_interest_payment": "2021-03-27T14:01:15",
  "sbd_seconds": "0",
  "sbd_seconds_last_update": "2021-03-27T14:01:15",
  "tags_usage": [],
  "to_withdraw": 0,
  "transfer_history": [],
  "vesting_balance": "0.000 STEEM",
  "vesting_shares": "8297.027008 VESTS",
  "vesting_withdraw_rate": "0.000000 VESTS",
  "vote_history": [],
  "voting_manabar": {
    "current_mana": "9974486094",
    "last_update_time": 1743859593
  },
  "voting_power": 0,
  "withdraw_routes": 0,
  "withdrawn": 0,
  "witness_votes": [],
  "witnesses_voted_for": 0,
  "rank": 199675
}

Withdraw Routes

IncomingOutgoing
Empty
Empty
{
  "incoming": [],
  "outgoing": []
}
From Date
To Date
steemdelegated 1.031 SP to @fureweb
2025/04/05 13:26:33
delegateefureweb
delegatorsteem
vesting shares1677.459086 VESTS
Transaction InfoBlock #94441672/Trx a7b2687a20623d6b8bcc2bf8c608c1335908ff32
View Raw JSON Data
{
  "block": 94441672,
  "op": [
    "delegate_vesting_shares",
    {
      "delegatee": "fureweb",
      "delegator": "steem",
      "vesting_shares": "1677.459086 VESTS"
    }
  ],
  "op_in_trx": 0,
  "timestamp": "2025-04-05T13:26:33",
  "trx_id": "a7b2687a20623d6b8bcc2bf8c608c1335908ff32",
  "trx_in_block": 7,
  "virtual_op": 0
}
steemdelegated 1.134 SP to @fureweb
2021/11/28 12:23:09
delegateefureweb
delegatorsteem
vesting shares1845.205532 VESTS
Transaction InfoBlock #59385101/Trx 9677bfcc2a65fe165fd4224feb1038ead4120bf1
View Raw JSON Data
{
  "block": 59385101,
  "op": [
    "delegate_vesting_shares",
    {
      "delegatee": "fureweb",
      "delegator": "steem",
      "vesting_shares": "1845.205532 VESTS"
    }
  ],
  "op_in_trx": 0,
  "timestamp": "2021-11-28T12:23:09",
  "trx_id": "9677bfcc2a65fe165fd4224feb1038ead4120bf1",
  "trx_in_block": 21,
  "virtual_op": 0
}
furewebsent 1.239 SBD to @user.dunamu- "1139f9c8-3df6-4063-9262-c3296e7641bb"
2021/03/27 14:01:15
amount1.239 SBD
fromfureweb
memo1139f9c8-3df6-4063-9262-c3296e7641bb
touser.dunamu
Transaction InfoBlock #52368165/Trx 97143d95e11071983e8f21991d324b25ab5587fb
View Raw JSON Data
{
  "block": 52368165,
  "op": [
    "transfer",
    {
      "amount": "1.239 SBD",
      "from": "fureweb",
      "memo": "1139f9c8-3df6-4063-9262-c3296e7641bb",
      "to": "user.dunamu"
    }
  ],
  "op_in_trx": 0,
  "timestamp": "2021-03-27T14:01:15",
  "trx_id": "97143d95e11071983e8f21991d324b25ab5587fb",
  "trx_in_block": 9,
  "virtual_op": 0
}
2020/01/21 13:14:36
authorsteemitboard
bodyCongratulations @fureweb! You received a personal award! <table><tr><td>https://steemitimages.com/70x70/http://steemitboard.com/@fureweb/birthday2.png</td><td>Happy Birthday! - You are on the Steem blockchain for 2 years!</td></tr></table> <sub>_You can view [your badges on your Steem Board](https://steemitboard.com/@fureweb) and compare to others on the [Steem Ranking](https://steemitboard.com/ranking/index.php?name=fureweb)_</sub> ###### [Vote for @Steemitboard as a witness](https://v2.steemconnect.com/sign/account-witness-vote?witness=steemitboard&approve=1) to get one more award and increased upvotes!
json metadata{"image":["https://steemitboard.com/img/notify.png"]}
parent authorfureweb
parent permlinknginx-ssl
permlinksteemitboard-notify-fureweb-20200121t131436000z
title
Transaction InfoBlock #40123082/Trx 1b319c04fa345ec7496e68372a7a8dab67d652f9
View Raw JSON Data
{
  "block": 40123082,
  "op": [
    "comment",
    {
      "author": "steemitboard",
      "body": "Congratulations @fureweb! You received a personal award!\n\n<table><tr><td>https://steemitimages.com/70x70/http://steemitboard.com/@fureweb/birthday2.png</td><td>Happy Birthday! - You are on the Steem blockchain for 2 years!</td></tr></table>\n\n<sub>_You can view [your badges on your Steem Board](https://steemitboard.com/@fureweb) and compare to others on the [Steem Ranking](https://steemitboard.com/ranking/index.php?name=fureweb)_</sub>\n\n\n###### [Vote for @Steemitboard as a witness](https://v2.steemconnect.com/sign/account-witness-vote?witness=steemitboard&approve=1) to get one more award and increased upvotes!",
      "json_metadata": "{\"image\":[\"https://steemitboard.com/img/notify.png\"]}",
      "parent_author": "fureweb",
      "parent_permlink": "nginx-ssl",
      "permlink": "steemitboard-notify-fureweb-20200121t131436000z",
      "title": ""
    }
  ],
  "op_in_trx": 0,
  "timestamp": "2020-01-21T13:14:36",
  "trx_id": "1b319c04fa345ec7496e68372a7a8dab67d652f9",
  "trx_in_block": 13,
  "virtual_op": 0
}
2019/01/21 14:14:48
authorsteemitboard
bodyCongratulations @fureweb! You received a personal award! <table><tr><td>https://steemitimages.com/70x70/http://steemitboard.com/@fureweb/birthday1.png</td><td>Happy Birthday! - You are on the Steem blockchain for 1 year!</td></tr></table> <sub>_[Click here to view your Board](https://steemitboard.com/@fureweb)_</sub> > Support [SteemitBoard's project](https://steemit.com/@steemitboard)! **[Vote for its witness](https://v2.steemconnect.com/sign/account-witness-vote?witness=steemitboard&approve=1)** and **get one more award**!
json metadata{"image":["https://steemitboard.com/img/notify.png"]}
parent authorfureweb
parent permlinknginx-ssl
permlinksteemitboard-notify-fureweb-20190121t141447000z
title
Transaction InfoBlock #29651724/Trx df1237709470016cc279cdf93c8674d23da23ee6
View Raw JSON Data
{
  "block": 29651724,
  "op": [
    "comment",
    {
      "author": "steemitboard",
      "body": "Congratulations @fureweb! You received a personal award!\n\n<table><tr><td>https://steemitimages.com/70x70/http://steemitboard.com/@fureweb/birthday1.png</td><td>Happy Birthday! - You are on the Steem blockchain for 1 year!</td></tr></table>\n\n<sub>_[Click here to view your Board](https://steemitboard.com/@fureweb)_</sub>\n\n\n> Support [SteemitBoard's project](https://steemit.com/@steemitboard)! **[Vote for its witness](https://v2.steemconnect.com/sign/account-witness-vote?witness=steemitboard&approve=1)** and **get one more award**!",
      "json_metadata": "{\"image\":[\"https://steemitboard.com/img/notify.png\"]}",
      "parent_author": "fureweb",
      "parent_permlink": "nginx-ssl",
      "permlink": "steemitboard-notify-fureweb-20190121t141447000z",
      "title": ""
    }
  ],
  "op_in_trx": 0,
  "timestamp": "2019-01-21T14:14:48",
  "trx_id": "df1237709470016cc279cdf93c8674d23da23ee6",
  "trx_in_block": 6,
  "virtual_op": 0
}
steemdelegated 1.248 SP to @fureweb
2018/07/04 01:28:12
delegateefureweb
delegatorsteem
vesting shares2029.736576 VESTS
Transaction InfoBlock #23867385/Trx 8c7932238699a8cf772c8b0eca61de9b3269b016
View Raw JSON Data
{
  "block": 23867385,
  "op": [
    "delegate_vesting_shares",
    {
      "delegatee": "fureweb",
      "delegator": "steem",
      "vesting_shares": "2029.736576 VESTS"
    }
  ],
  "op_in_trx": 0,
  "timestamp": "2018-07-04T01:28:12",
  "trx_id": "8c7932238699a8cf772c8b0eca61de9b3269b016",
  "trx_in_block": 15,
  "virtual_op": 0
}
parley.appsent 0.001 STEEM to @fureweb- "Have a amazing day! 😊"
2018/04/10 21:28:33
amount0.001 STEEM
fromparley.app
memoHave a amazing day! 😊
tofureweb
Transaction InfoBlock #21455313/Trx 6580d78070287978df98760882b1d38af4ce13c1
View Raw JSON Data
{
  "block": 21455313,
  "op": [
    "transfer",
    {
      "amount": "0.001 STEEM",
      "from": "parley.app",
      "memo": "Have a amazing day! 😊",
      "to": "fureweb"
    }
  ],
  "op_in_trx": 0,
  "timestamp": "2018-04-10T21:28:33",
  "trx_id": "6580d78070287978df98760882b1d38af4ce13c1",
  "trx_in_block": 40,
  "virtual_op": 0
}
2018/04/04 09:57:36
authorhikamaeng
body오 너도 이미 잘 쓰고 있었네. 더 늦게 시작하면 안되었을 분위기인가..=.= 지인 중 젤 마지막에 합류한 느낌.
json metadata{"tags":["development"],"app":"steemit/0.1"}
parent authorfureweb
parent permlinkre-hikamaeng-7s6nmg-20180403t231930892z
permlinkre-fureweb-re-hikamaeng-7s6nmg-20180404t095736451z
title
Transaction InfoBlock #21268710/Trx da3f659706a7d5c9f2b07592e245ed31986779a3
View Raw JSON Data
{
  "block": 21268710,
  "op": [
    "comment",
    {
      "author": "hikamaeng",
      "body": "오 너도 이미 잘 쓰고 있었네. 더 늦게 시작하면 안되었을 분위기인가..=.=\n지인 중 젤 마지막에 합류한 느낌.",
      "json_metadata": "{\"tags\":[\"development\"],\"app\":\"steemit/0.1\"}",
      "parent_author": "fureweb",
      "parent_permlink": "re-hikamaeng-7s6nmg-20180403t231930892z",
      "permlink": "re-fureweb-re-hikamaeng-7s6nmg-20180404t095736451z",
      "title": ""
    }
  ],
  "op_in_trx": 0,
  "timestamp": "2018-04-04T09:57:36",
  "trx_id": "da3f659706a7d5c9f2b07592e245ed31986779a3",
  "trx_in_block": 39,
  "virtual_op": 0
}
furewebcustom json: follow
2018/04/03 23:20:15
idfollow
json["reblog",{"account":"fureweb","author":"hikamaeng","permlink":"7s6nmg"}]
required auths[]
required posting auths["fureweb"]
Transaction InfoBlock #21255967/Trx 3c1a94ef3e5756f769d09a3bb77a5fbb5bba4bea
View Raw JSON Data
{
  "block": 21255967,
  "op": [
    "custom_json",
    {
      "id": "follow",
      "json": "[\"reblog\",{\"account\":\"fureweb\",\"author\":\"hikamaeng\",\"permlink\":\"7s6nmg\"}]",
      "required_auths": [],
      "required_posting_auths": [
        "fureweb"
      ]
    }
  ],
  "op_in_trx": 0,
  "timestamp": "2018-04-03T23:20:15",
  "trx_id": "3c1a94ef3e5756f769d09a3bb77a5fbb5bba4bea",
  "trx_in_block": 10,
  "virtual_op": 0
}
2018/04/03 23:19:33
authorfureweb
body항상 좋은 말씀 감사합니다!
json metadata{"tags":["development"],"app":"steemit/0.1"}
parent authorhikamaeng
parent permlink7s6nmg
permlinkre-hikamaeng-7s6nmg-20180403t231930892z
title
Transaction InfoBlock #21255953/Trx b668291aabcbf66f8010aa45a5884a3b69d42a3c
View Raw JSON Data
{
  "block": 21255953,
  "op": [
    "comment",
    {
      "author": "fureweb",
      "body": "항상 좋은 말씀 감사합니다!",
      "json_metadata": "{\"tags\":[\"development\"],\"app\":\"steemit/0.1\"}",
      "parent_author": "hikamaeng",
      "parent_permlink": "7s6nmg",
      "permlink": "re-hikamaeng-7s6nmg-20180403t231930892z",
      "title": ""
    }
  ],
  "op_in_trx": 0,
  "timestamp": "2018-04-03T23:19:33",
  "trx_id": "b668291aabcbf66f8010aa45a5884a3b69d42a3c",
  "trx_in_block": 14,
  "virtual_op": 0
}
furewebdeleted a comment or post
2018/04/03 22:59:57
authorfureweb
permlinkre-jiwootak-re-hikamaeng-7s6nmg-20180403t225943276z
Transaction InfoBlock #21255561/Trx 9b2a4b9a5f6d4dbd20cc9835f4e020ea357786ed
View Raw JSON Data
{
  "block": 21255561,
  "op": [
    "delete_comment",
    {
      "author": "fureweb",
      "permlink": "re-jiwootak-re-hikamaeng-7s6nmg-20180403t225943276z"
    }
  ],
  "op_in_trx": 0,
  "timestamp": "2018-04-03T22:59:57",
  "trx_id": "9b2a4b9a5f6d4dbd20cc9835f4e020ea357786ed",
  "trx_in_block": 24,
  "virtual_op": 0
}
2018/04/03 22:59:45
authorfureweb
body좋은 말씀들 항상 감사합니다!
json metadata{"tags":["development"],"app":"steemit/0.1"}
parent authorjiwootak
parent permlinkre-hikamaeng-7s6nmg-20180403t071907418z
permlinkre-jiwootak-re-hikamaeng-7s6nmg-20180403t225943276z
title
Transaction InfoBlock #21255557/Trx c8ae6eb906cb506a20c866c5367c2246a8bf9f7a
View Raw JSON Data
{
  "block": 21255557,
  "op": [
    "comment",
    {
      "author": "fureweb",
      "body": "좋은 말씀들 항상 감사합니다!",
      "json_metadata": "{\"tags\":[\"development\"],\"app\":\"steemit/0.1\"}",
      "parent_author": "jiwootak",
      "parent_permlink": "re-hikamaeng-7s6nmg-20180403t071907418z",
      "permlink": "re-jiwootak-re-hikamaeng-7s6nmg-20180403t225943276z",
      "title": ""
    }
  ],
  "op_in_trx": 0,
  "timestamp": "2018-04-03T22:59:45",
  "trx_id": "c8ae6eb906cb506a20c866c5367c2246a8bf9f7a",
  "trx_in_block": 15,
  "virtual_op": 0
}
furewebupvoted (100.00%) @hikamaeng / 7s6nmg
2018/04/02 14:59:00
authorhikamaeng
permlink7s6nmg
voterfureweb
weight10000 (100.00%)
Transaction InfoBlock #21217148/Trx ef71cf8a9cd80c8477306ffa18490e90e1572d92
View Raw JSON Data
{
  "block": 21217148,
  "op": [
    "vote",
    {
      "author": "hikamaeng",
      "permlink": "7s6nmg",
      "voter": "fureweb",
      "weight": 10000
    }
  ],
  "op_in_trx": 0,
  "timestamp": "2018-04-02T14:59:00",
  "trx_id": "ef71cf8a9cd80c8477306ffa18490e90e1572d92",
  "trx_in_block": 47,
  "virtual_op": 0
}
2018/04/01 23:29:03
idfollow
json["follow",{"follower":"fureweb","following":"hikamaeng","what":["blog"]}]
required auths[]
required posting auths["fureweb"]
Transaction InfoBlock #21198552/Trx b7e450b2359d94d5df96ad18f7c489b0a6f6a06d
View Raw JSON Data
{
  "block": 21198552,
  "op": [
    "custom_json",
    {
      "id": "follow",
      "json": "[\"follow\",{\"follower\":\"fureweb\",\"following\":\"hikamaeng\",\"what\":[\"blog\"]}]",
      "required_auths": [],
      "required_posting_auths": [
        "fureweb"
      ]
    }
  ],
  "op_in_trx": 0,
  "timestamp": "2018-04-01T23:29:03",
  "trx_id": "b7e450b2359d94d5df96ad18f7c489b0a6f6a06d",
  "trx_in_block": 21,
  "virtual_op": 0
}
furewebcustom json: follow
2018/04/01 23:28:54
idfollow
json["reblog",{"account":"fureweb","author":"hikamaeng","permlink":"re-1"}]
required auths[]
required posting auths["fureweb"]
Transaction InfoBlock #21198549/Trx 0d61633d523c8cb9dd288a0fbe6d23f4ea121559
View Raw JSON Data
{
  "block": 21198549,
  "op": [
    "custom_json",
    {
      "id": "follow",
      "json": "[\"reblog\",{\"account\":\"fureweb\",\"author\":\"hikamaeng\",\"permlink\":\"re-1\"}]",
      "required_auths": [],
      "required_posting_auths": [
        "fureweb"
      ]
    }
  ],
  "op_in_trx": 0,
  "timestamp": "2018-04-01T23:28:54",
  "trx_id": "0d61633d523c8cb9dd288a0fbe6d23f4ea121559",
  "trx_in_block": 51,
  "virtual_op": 0
}
furewebupvoted (100.00%) @hikamaeng / re-1
2018/04/01 23:28:45
authorhikamaeng
permlinkre-1
voterfureweb
weight10000 (100.00%)
Transaction InfoBlock #21198546/Trx 510545e5a4ea82744170a436f05ad0084a11b131
View Raw JSON Data
{
  "block": 21198546,
  "op": [
    "vote",
    {
      "author": "hikamaeng",
      "permlink": "re-1",
      "voter": "fureweb",
      "weight": 10000
    }
  ],
  "op_in_trx": 0,
  "timestamp": "2018-04-01T23:28:45",
  "trx_id": "510545e5a4ea82744170a436f05ad0084a11b131",
  "trx_in_block": 32,
  "virtual_op": 0
}
furewebupvoted (100.00%) @loum / eos-bp-3
2018/03/13 07:57:12
authorloum
permlinkeos-bp-3
voterfureweb
weight10000 (100.00%)
Transaction InfoBlock #20633775/Trx f6922fcce9018507aaa51675be8750df083290ce
View Raw JSON Data
{
  "block": 20633775,
  "op": [
    "vote",
    {
      "author": "loum",
      "permlink": "eos-bp-3",
      "voter": "fureweb",
      "weight": 10000
    }
  ],
  "op_in_trx": 0,
  "timestamp": "2018-03-13T07:57:12",
  "trx_id": "f6922fcce9018507aaa51675be8750df083290ce",
  "trx_in_block": 12,
  "virtual_op": 0
}
furewebupvoted (100.00%) @creamer7 / 2lhng5-eos
2018/03/13 01:34:18
authorcreamer7
permlink2lhng5-eos
voterfureweb
weight10000 (100.00%)
Transaction InfoBlock #20626120/Trx e5d1bbee1870de06e380bffccbe0a1f71d61bc0f
View Raw JSON Data
{
  "block": 20626120,
  "op": [
    "vote",
    {
      "author": "creamer7",
      "permlink": "2lhng5-eos",
      "voter": "fureweb",
      "weight": 10000
    }
  ],
  "op_in_trx": 0,
  "timestamp": "2018-03-13T01:34:18",
  "trx_id": "e5d1bbee1870de06e380bffccbe0a1f71d61bc0f",
  "trx_in_block": 3,
  "virtual_op": 0
}
furewebupvoted (100.00%) @creamer7 / 6p42m-eos
2018/03/12 04:06:18
authorcreamer7
permlink6p42m-eos
voterfureweb
weight10000 (100.00%)
Transaction InfoBlock #20600382/Trx 9cb00139670d69f78dc696fed10ef9c5c117e56b
View Raw JSON Data
{
  "block": 20600382,
  "op": [
    "vote",
    {
      "author": "creamer7",
      "permlink": "6p42m-eos",
      "voter": "fureweb",
      "weight": 10000
    }
  ],
  "op_in_trx": 0,
  "timestamp": "2018-03-12T04:06:18",
  "trx_id": "9cb00139670d69f78dc696fed10ef9c5c117e56b",
  "trx_in_block": 45,
  "virtual_op": 0
}
furewebupvoted (100.00%) @musicholic / 746yea
2018/03/10 13:18:00
authormusicholic
permlink746yea
voterfureweb
weight10000 (100.00%)
Transaction InfoBlock #20553907/Trx e67219865f961fdc169f77aa173db4744d9feab7
View Raw JSON Data
{
  "block": 20553907,
  "op": [
    "vote",
    {
      "author": "musicholic",
      "permlink": "746yea",
      "voter": "fureweb",
      "weight": 10000
    }
  ],
  "op_in_trx": 0,
  "timestamp": "2018-03-10T13:18:00",
  "trx_id": "e67219865f961fdc169f77aa173db4744d9feab7",
  "trx_in_block": 16,
  "virtual_op": 0
}
2018/03/09 14:47:00
authorcreamer7
body읽어주셔서 감사합니다 !
json metadata{"tags":["kr"],"app":"steemit/0.1"}
parent authorfureweb
parent permlinkre-creamer7-eos-q-and-a-20180309t122125877z
permlinkre-fureweb-re-creamer7-eos-q-and-a-20180309t144648597z
title
Transaction InfoBlock #20526957/Trx 7a76ad91b321da792ef4bf6b4b7ca26c5b4dcfbc
View Raw JSON Data
{
  "block": 20526957,
  "op": [
    "comment",
    {
      "author": "creamer7",
      "body": "읽어주셔서 감사합니다 !",
      "json_metadata": "{\"tags\":[\"kr\"],\"app\":\"steemit/0.1\"}",
      "parent_author": "fureweb",
      "parent_permlink": "re-creamer7-eos-q-and-a-20180309t122125877z",
      "permlink": "re-fureweb-re-creamer7-eos-q-and-a-20180309t144648597z",
      "title": ""
    }
  ],
  "op_in_trx": 0,
  "timestamp": "2018-03-09T14:47:00",
  "trx_id": "7a76ad91b321da792ef4bf6b4b7ca26c5b4dcfbc",
  "trx_in_block": 7,
  "virtual_op": 0
}
2018/03/09 12:21:27
authorfureweb
body정보 감사합니다!
json metadata{"tags":["kr"],"app":"steemit/0.1"}
parent authorcreamer7
parent permlinkeos-q-and-a
permlinkre-creamer7-eos-q-and-a-20180309t122125877z
title
Transaction InfoBlock #20524046/Trx ca85d125d693b8fc57874171670cdbc1a936f731
View Raw JSON Data
{
  "block": 20524046,
  "op": [
    "comment",
    {
      "author": "fureweb",
      "body": "정보 감사합니다!",
      "json_metadata": "{\"tags\":[\"kr\"],\"app\":\"steemit/0.1\"}",
      "parent_author": "creamer7",
      "parent_permlink": "eos-q-and-a",
      "permlink": "re-creamer7-eos-q-and-a-20180309t122125877z",
      "title": ""
    }
  ],
  "op_in_trx": 0,
  "timestamp": "2018-03-09T12:21:27",
  "trx_id": "ca85d125d693b8fc57874171670cdbc1a936f731",
  "trx_in_block": 4,
  "virtual_op": 0
}
furewebupvoted (100.00%) @creamer7 / eos-q-and-a
2018/03/09 12:21:21
authorcreamer7
permlinkeos-q-and-a
voterfureweb
weight10000 (100.00%)
Transaction InfoBlock #20524044/Trx eae29f8dc1e4f7f0fd77f9326f8c2efea3fb7af9
View Raw JSON Data
{
  "block": 20524044,
  "op": [
    "vote",
    {
      "author": "creamer7",
      "permlink": "eos-q-and-a",
      "voter": "fureweb",
      "weight": 10000
    }
  ],
  "op_in_trx": 0,
  "timestamp": "2018-03-09T12:21:21",
  "trx_id": "eae29f8dc1e4f7f0fd77f9326f8c2efea3fb7af9",
  "trx_in_block": 9,
  "virtual_op": 0
}
2018/03/09 05:44:03
authoreosys
permlinkre-fureweb-re-eosys-4ve66e-20180306t052958156z
voterfureweb
weight10000 (100.00%)
Transaction InfoBlock #20516099/Trx dd10dda836ed4b26c65bd46adccfc328bd3a3d2e
View Raw JSON Data
{
  "block": 20516099,
  "op": [
    "vote",
    {
      "author": "eosys",
      "permlink": "re-fureweb-re-eosys-4ve66e-20180306t052958156z",
      "voter": "fureweb",
      "weight": 10000
    }
  ],
  "op_in_trx": 0,
  "timestamp": "2018-03-09T05:44:03",
  "trx_id": "dd10dda836ed4b26c65bd46adccfc328bd3a3d2e",
  "trx_in_block": 33,
  "virtual_op": 0
}
furewebupvoted (100.00%) @eosys / eosys-eos
2018/03/09 05:18:48
authoreosys
permlinkeosys-eos
voterfureweb
weight10000 (100.00%)
Transaction InfoBlock #20515594/Trx ac13535f3efe45fef4190d15f7337c7c1757a918
View Raw JSON Data
{
  "block": 20515594,
  "op": [
    "vote",
    {
      "author": "eosys",
      "permlink": "eosys-eos",
      "voter": "fureweb",
      "weight": 10000
    }
  ],
  "op_in_trx": 0,
  "timestamp": "2018-03-09T05:18:48",
  "trx_id": "ac13535f3efe45fef4190d15f7337c7c1757a918",
  "trx_in_block": 22,
  "virtual_op": 0
}
2018/03/06 05:30:00
authoreosys
body건강한 EOS 생태계의 확장을 위해 최선을 다하겠습니다.^^
json metadata{"tags":["kr"],"app":"steemit/0.1"}
parent authorfureweb
parent permlinkre-eosys-4ve66e-20180305t011950968z
permlinkre-fureweb-re-eosys-4ve66e-20180306t052958156z
title
Transaction InfoBlock #20429561/Trx c66f78caee3f8444ee91f04515c779d18716ed48
View Raw JSON Data
{
  "block": 20429561,
  "op": [
    "comment",
    {
      "author": "eosys",
      "body": "건강한 EOS 생태계의 확장을 위해 최선을 다하겠습니다.^^",
      "json_metadata": "{\"tags\":[\"kr\"],\"app\":\"steemit/0.1\"}",
      "parent_author": "fureweb",
      "parent_permlink": "re-eosys-4ve66e-20180305t011950968z",
      "permlink": "re-fureweb-re-eosys-4ve66e-20180306t052958156z",
      "title": ""
    }
  ],
  "op_in_trx": 0,
  "timestamp": "2018-03-06T05:30:00",
  "trx_id": "c66f78caee3f8444ee91f04515c779d18716ed48",
  "trx_in_block": 35,
  "virtual_op": 0
}
steemdelegated 13.736 SP to @fureweb
2018/03/05 09:31:57
delegateefureweb
delegatorsteem
vesting shares22341.503299 VESTS
Transaction InfoBlock #20405612/Trx d8644121209cda45df20db31e7ab547ec3b1f093
View Raw JSON Data
{
  "block": 20405612,
  "op": [
    "delegate_vesting_shares",
    {
      "delegatee": "fureweb",
      "delegator": "steem",
      "vesting_shares": "22341.503299 VESTS"
    }
  ],
  "op_in_trx": 0,
  "timestamp": "2018-03-05T09:31:57",
  "trx_id": "d8644121209cda45df20db31e7ab547ec3b1f093",
  "trx_in_block": 40,
  "virtual_op": 0
}
furewebclaimed reward balance: 1.239 SBD, 0.465 SP
2018/03/05 07:52:15
accountfureweb
reward sbd1.239 SBD
reward steem0.000 STEEM
reward vests755.921913 VESTS
Transaction InfoBlock #20403618/Trx aa20c2a317bec8b9076f1951661dd815e2acc335
View Raw JSON Data
{
  "block": 20403618,
  "op": [
    "claim_reward_balance",
    {
      "account": "fureweb",
      "reward_sbd": "1.239 SBD",
      "reward_steem": "0.000 STEEM",
      "reward_vests": "755.921913 VESTS"
    }
  ],
  "op_in_trx": 0,
  "timestamp": "2018-03-05T07:52:15",
  "trx_id": "aa20c2a317bec8b9076f1951661dd815e2acc335",
  "trx_in_block": 0,
  "virtual_op": 0
}
furewebcustom json: follow
2018/03/05 01:20:51
idfollow
json["reblog",{"account":"fureweb","author":"eosys","permlink":"4ve66e"}]
required auths[]
required posting auths["fureweb"]
Transaction InfoBlock #20395791/Trx 6c390d4e30c271390c21b4edca5e164c99b09ddc
View Raw JSON Data
{
  "block": 20395791,
  "op": [
    "custom_json",
    {
      "id": "follow",
      "json": "[\"reblog\",{\"account\":\"fureweb\",\"author\":\"eosys\",\"permlink\":\"4ve66e\"}]",
      "required_auths": [],
      "required_posting_auths": [
        "fureweb"
      ]
    }
  ],
  "op_in_trx": 0,
  "timestamp": "2018-03-05T01:20:51",
  "trx_id": "6c390d4e30c271390c21b4edca5e164c99b09ddc",
  "trx_in_block": 23,
  "virtual_op": 0
}
2018/03/05 01:19:54
authorfureweb
body큰 그림을 보고 계셨네요..출사표 잘 보았습니다! 건강한 EOS 생태계에 도움주실분이라 믿습니다. 지켜보겠습니다~!
json metadata{"tags":["kr"],"app":"steemit/0.1"}
parent authoreosys
parent permlink4ve66e
permlinkre-eosys-4ve66e-20180305t011950968z
title
Transaction InfoBlock #20395772/Trx 3a3d9d7a8e887c124c73ff2b7d79e390e4cd03aa
View Raw JSON Data
{
  "block": 20395772,
  "op": [
    "comment",
    {
      "author": "fureweb",
      "body": "큰 그림을 보고 계셨네요..출사표 잘 보았습니다! 건강한 EOS 생태계에 도움주실분이라 믿습니다. 지켜보겠습니다~!",
      "json_metadata": "{\"tags\":[\"kr\"],\"app\":\"steemit/0.1\"}",
      "parent_author": "eosys",
      "parent_permlink": "4ve66e",
      "permlink": "re-eosys-4ve66e-20180305t011950968z",
      "title": ""
    }
  ],
  "op_in_trx": 0,
  "timestamp": "2018-03-05T01:19:54",
  "trx_id": "3a3d9d7a8e887c124c73ff2b7d79e390e4cd03aa",
  "trx_in_block": 5,
  "virtual_op": 0
}
furewebupvoted (100.00%) @eosys / 4ve66e
2018/03/05 01:18:21
authoreosys
permlink4ve66e
voterfureweb
weight10000 (100.00%)
Transaction InfoBlock #20395741/Trx c443928a38728ff1e6cc8cd6f5f653c53cfe4258
View Raw JSON Data
{
  "block": 20395741,
  "op": [
    "vote",
    {
      "author": "eosys",
      "permlink": "4ve66e",
      "voter": "fureweb",
      "weight": 10000
    }
  ],
  "op_in_trx": 0,
  "timestamp": "2018-03-05T01:18:21",
  "trx_id": "c443928a38728ff1e6cc8cd6f5f653c53cfe4258",
  "trx_in_block": 49,
  "virtual_op": 0
}
furewebfollowed @eosys
2018/03/05 01:15:30
idfollow
json["follow",{"follower":"fureweb","following":"eosys","what":["blog"]}]
required auths[]
required posting auths["fureweb"]
Transaction InfoBlock #20395684/Trx 5094e2f3cb49ead4a56044df8d541d5225a31047
View Raw JSON Data
{
  "block": 20395684,
  "op": [
    "custom_json",
    {
      "id": "follow",
      "json": "[\"follow\",{\"follower\":\"fureweb\",\"following\":\"eosys\",\"what\":[\"blog\"]}]",
      "required_auths": [],
      "required_posting_auths": [
        "fureweb"
      ]
    }
  ],
  "op_in_trx": 0,
  "timestamp": "2018-03-05T01:15:30",
  "trx_id": "5094e2f3cb49ead4a56044df8d541d5225a31047",
  "trx_in_block": 45,
  "virtual_op": 0
}
furewebupvoted (100.00%) @loum / 7ptino
2018/03/04 14:21:30
authorloum
permlink7ptino
voterfureweb
weight10000 (100.00%)
Transaction InfoBlock #20382609/Trx 417e52cd088f94cda62a93535932db71128824cd
View Raw JSON Data
{
  "block": 20382609,
  "op": [
    "vote",
    {
      "author": "loum",
      "permlink": "7ptino",
      "voter": "fureweb",
      "weight": 10000
    }
  ],
  "op_in_trx": 0,
  "timestamp": "2018-03-04T14:21:30",
  "trx_id": "417e52cd088f94cda62a93535932db71128824cd",
  "trx_in_block": 29,
  "virtual_op": 0
}
furewebreceived 1.239 SBD, 0.465 SP author reward for @fureweb / nginx-ssl
2018/03/01 04:23:51
authorfureweb
permlinknginx-ssl
sbd payout1.239 SBD
steem payout0.000 STEEM
vesting payout755.921913 VESTS
Transaction InfoBlock #20284302/Virtual Operation #6
View Raw JSON Data
{
  "block": 20284302,
  "op": [
    "author_reward",
    {
      "author": "fureweb",
      "permlink": "nginx-ssl",
      "sbd_payout": "1.239 SBD",
      "steem_payout": "0.000 STEEM",
      "vesting_payout": "755.921913 VESTS"
    }
  ],
  "op_in_trx": 0,
  "timestamp": "2018-03-01T04:23:51",
  "trx_id": "0000000000000000000000000000000000000000",
  "trx_in_block": 4294967295,
  "virtual_op": 6
}
cheerupupvoted (8.00%) @fureweb / nginx-ssl
2018/02/22 14:29:24
authorfureweb
permlinknginx-ssl
votercheerup
weight800 (8.00%)
Transaction InfoBlock #20095016/Trx 5066d3145127bf561a8637ce1c2df0ef649a8c38
View Raw JSON Data
{
  "block": 20095016,
  "op": [
    "vote",
    {
      "author": "fureweb",
      "permlink": "nginx-ssl",
      "voter": "cheerup",
      "weight": 800
    }
  ],
  "op_in_trx": 0,
  "timestamp": "2018-02-22T14:29:24",
  "trx_id": "5066d3145127bf561a8637ce1c2df0ef649a8c38",
  "trx_in_block": 31,
  "virtual_op": 0
}
2018/02/22 14:29:12
authorcheerup
bodyCheer Up! - from Clean STEEM activity supporter
json metadata{"app":"cheerup/test"}
parent authorfureweb
parent permlinknginx-ssl
permlinkre-fureweb-nginx-ssl-20180222t142911566z
title
Transaction InfoBlock #20095012/Trx ea5f998630fed311548968a07e15c2b3388fb415
View Raw JSON Data
{
  "block": 20095012,
  "op": [
    "comment",
    {
      "author": "cheerup",
      "body": "Cheer Up!\n- from Clean STEEM activity supporter",
      "json_metadata": "{\"app\":\"cheerup/test\"}",
      "parent_author": "fureweb",
      "parent_permlink": "nginx-ssl",
      "permlink": "re-fureweb-nginx-ssl-20180222t142911566z",
      "title": ""
    }
  ],
  "op_in_trx": 0,
  "timestamp": "2018-02-22T14:29:12",
  "trx_id": "ea5f998630fed311548968a07e15c2b3388fb415",
  "trx_in_block": 34,
  "virtual_op": 0
}
furewebpublished a new post: nginx-ssl
2018/02/22 14:26:57
authorfureweb
body# 들어가기 전에 --- 1. 아직 아래 link들에 대해 새창 열기 기능이 steemit에서 지원되지 않는 것 같습니다. 혹시라도 아래에 등장하는 링크를 클릭하시려면 우클릭 후 새창에서 열어 확인해 주세요! 2. 또한 syntax highlighting이 제대로 지원되지 않는 것 같아서, 혹시라도 보기 불편하신 점이 있다면 아래의 링크를 통해 원본 게시글을 확인하실 수도 있습니다. [https://fureweb-com.github.io/blog/2017/08/07/applying-free-ssl-to-your-ubuntu-server-using-nginx-and-let'sencrypt-from-scratch.html](https://fureweb-com.github.io/blog/2017/08/07/applying-free-ssl-to-your-ubuntu-server-using-nginx-and-let'sencrypt-from-scratch.html) # 개요 --- 본 튜토리얼은 다음의 순서대로 진행됩니다. - 우분투 VPS 생성 - nginx 설치 및 설정 - 도메인 Host IP 설정 및 확인 - Certbot 설치 및 설정 - 최종 확인 - 마치며 windows 환경에서 아래 예제를 실행하셔야 하는 분들은 [mingw](http://www.mingw.org/), [putty](https://www.chiark.greenend.org.uk/~sgtatham/putty/latest.html), windows 10 bash 등을 통해 bash shell을 사용하실 수 있습니다. 본 포스트의 내용은 로컬머신에서 bash shell을 사용할 수 있음을 전제하여 작성했습니다. 또한 vi를 사용할 수 있음을 전제하였으나, vi 사용이 어려우신 경우 nano에 대한 사용 방법을 검색하신 뒤 예제를 따라하시는 것을 추천드립니다. 그런 경우 아래에 표시한 vi 명령을 nano 명령으로 대신하시기 바랍니다. # 우분투 VPS 생성 --- 자신이 사용할 수 있는 클라우드 서비스 내 VPS를 Ubuntu 16.04 LTS 버전으로 생성합니다. 저는 개인적으로 제가 알고있는 한 가장 간단하고 저렴하게 VPS를 생성할 수 있는 [iwinv.kr 클라우드 서비스](//iwinv.kr)를 이용하여 VPS를 생성하도록 하겠습니다. 아래 예제에서는 Ubuntu 16.04 LTS(32bit) 버전으로 VPS를 생성하여 예제를 진행하게 됩니다. 편의상 root 계정으로 아래 예제를 수행하겠습니다. 방화벽 설정과 관련된 부분은 이 포스팅의 주제를 벗어나므로, 가능하다면 VPS 생성 시 방화벽은 사용하지 않음으로 설정하셔서 예제를 실습하시기를 희망합니다. # nginx 설치 및 설정 --- ssh 클라이언트를 이용하여 방금 막 생성한 VPS로 접속합니다. 접속 후 다음의 명령을 차례대로 실행하여 nginx를 서버에 설치한 뒤, 상태를 확인합니다. ```bash $ ssh root@your-vps-ip # 로그인 완료 후 아래 명령을 실행합니다. $ apt-get update $ apt-get install nginx ``` 설치 후 nginx 실행 상태를 다음과 같이 확인할 수 있습니다. ```bash $ service nginx status ``` ![nginx 설치 후 상태 확인](https://steemitimages.com/DQmT5UFQLESiCLNpXWp4EAyr2sTi5dZBphFoLYBzQ8v6CUd/20170807-nginx-status.png) 만약 현재 상태가 inactive라면, 다음의 명령을 통해 nginx 프로세스를 실행시킵니다. ```bash $ service nginx start ``` 설치가 완료된 후 브라우저를 통해 서버의 IP를 입력하여 페이지를 요청하면 welcome to nginx 페이지를 확인할 수 있습니다. 만약 welcome 페이지를 볼수 없다면 방화벽 설정 문제일 가능성이 있습니다. 방화벽과 관련된 부분은 클라우드 서비스 업체마다 설정하는 방법이 다를 수 있으니, 사용하시는 업체의 방화벽 설정 사용 설명을 통해 http 요청을 위한 80번 포트 및 https 요청을 위한 443 포트를 열어둘 수 있도록 합니다. 보유하고 있는 도메인을 현재 VPS로 연결시키기 전, 해당 도메인을 통해 본 서버로 http 요청을 해 오는 경우에 대해 처리할 수 있도록 다음과 같이 nginx 설정을 수행합니다. ```bash # 다음의 경로로 이동하여 ssltest.fureweb.com 도메인 요청에 대한 설정파일을 생성합니다. # 아래 경로에 등록된 conf 확장자를 가진 모든 파일이 nginx.conf파일에 의해 include 되며, # nginx가 실행될 때 본 디렉토리 내 파일들이 해석되게 됩니다. $ cd /etc/nginx/conf.d # 원하는 도메인 명으로 설정 파일을 하나 생성합니다. $ vi ssltest.fureweb.com.conf ``` 아래의 내용을 ssltest.fureweb.com.conf 파일에 입력합니다. ```bash server { listen 80; server_name ssltest.fureweb.com; } ``` 필요한 설정 파일을 생성하였다면, 다음의 명령을 통해 설정에 오타 등의 오류는 없는지 확인한 뒤 설정을 적용합니다. ```bash # 설정 파일들에 오류가 없는지 확인한 뒤 $ nginx -t nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful # 오류가 없다면 설정 파일 내용을 적용합니다. $ nginx -s reload ``` 현재 VPS는 ssltest.fureweb.com에 대한 http 요청을 처리할 수 있는 상태가 되었습니다. 이제 자신이 가지고 있는 도메인 관리업체의 웹사이트에 로그인하여 해당 도메인에 대한 http 요청이 새로 만든 VPS로 전달될 수 있도록 별도의 설정을 진행해 보겠습니다. # 도메인 Host IP 설정 및 확인 --- 본인이 보유하고있는 도메인을 관리하는 업체 사이트에 로그인하여, 자신이 보유한 도메인(또는 서브도메인)에 대한 Host IP를 설정합니다. 예시로, 제가 보유하고 있는 ssltest.fureweb.com 이라는 서브도메인에 대한 http 요청이 방금 만든 VPS 서버로 연결되도록 설정을 추가하겠습니다. 도메인 등록 대행업체마다 설정하는 방법은 다를 수 있으니, 아래 사진을 참고하셔서 비슷한 메뉴에서 설정을 처리해주세요. 일반적으로 DNS 관리 메뉴의 하위 메뉴에서 설정하실 수 있습니다. ![DNS 관리 메뉴 내 host ip 설정](https://fureweb-com.github.io/assets/img/posts/20170807-set-host-ip.png) 만약 이전에 해당 도메인으로의 연결을 한 적이 있다면, 로컬 PC의 DNS캐시를 삭제해야합니다. 없다면 무시하셔도 됩니다. ```bash # OSX 10.10.4 이상인 경우 $ killall -HUP mDNSResponder # Windows 10을 사용하는 경우 - powershell 또는 cmd에서 ipconfig /flushdns # 죄송하지만 이 외에는 검색해 주세요 -_-;; ``` 브라우저가 크롬이라면, 주소표시줄에 다음의 경로를 복사&붙여넣기하여 조회되는 화면에서 `Clear Host Cache` 버튼을 클릭하여 캐시를 삭제하세요. ```url chrome://net-internals/#dns ``` 모든 설정에 문제가 없다면, 이제 웹 브라우저를 통해 내가 가지고 있는 도메인에 대한 연결 요청이 방금 만든 VPS로 전달되게 됩니다. 단, 도메인 관리 업체마다 해당 적용값이 얼마나 빨리 반영되는지는 차이가 있을 수 있으므로, 충분한 시간을 두고 확인을 진행해 주세요. 통상 1~2분 내에는 적용되는 걸로 알고 있으나, 다른 업체는 어떤지 사용해보지 않아서 잘 모르겠네요. ^^; # Certbot 설치 및 설정 --- 먼저 certbot을 설치합니다. ```bash $ add-apt-repository ppa:certbot/certbot ``` <br> 해당 저장소에 담긴 패키지 정보를 확인할 수 있도록 다음과 같이 업데이트를 수행합니다. ```bash $ apt-get update ``` <br> `apt-get`을 이용하여 Certbot을 설치합니다. ```bash $ apt-get install python-certbot-nginx ``` <br> 설치된 certbot을 이용하여 ssltest.fureweb.com 도메인에 대한 SSL 인증서만 발급받도록 합니다. ```bash $ certbot certonly --nginx -d ssltest.fureweb.com # 위 명령을 실행하면 해당 도메인을 관리하는 사람의 이메일 주소를 입력하라고 나옵니다. 입력해 주세요. # 만료일에 대한 정보를 보내줍니다. # 약관에는 동의(A)하셔야 하며, # EFF 재단과의 이메일을 공유할지 여부를 묻는 부분에 대해서는 원하시는대로 진행하시면 됩니다. ``` <br> 아래와 같은 메시지들이 출력됩니다. ![Certbot 설정 과정](https://fureweb-com.github.io/assets/img/posts/20170807-certbot-process.png) 위 명령을 수행하고 나면, 아래 경로에 총 5개의 파일이 생성되어 있음을 확인할 수 있습니다. (실제로는 /etc/letsencrypt/archive/도메인명 디렉토리 내 파일에 대한 심볼릭 링크 입니다.) ```bash $ ls -al /etc/letsencrypt/live/ssltest.fureweb.com total 12 drwxr-xr-x 2 root root 4096 Aug 7 17:03 ./ drwx------ 4 root root 4096 Aug 7 16:56 ../ lrwxrwxrwx 1 root root 43 Aug 7 17:03 cert.pem -> ../../archive/ssltest.fureweb.com/cert1.pem lrwxrwxrwx 1 root root 44 Aug 7 17:03 chain.pem -> ../../archive/ssltest.fureweb.com/chain1.pem lrwxrwxrwx 1 root root 48 Aug 7 17:03 fullchain.pem -> ../../archive/ssltest.fureweb.com/fullchain1.pem lrwxrwxrwx 1 root root 46 Aug 7 17:03 privkey.pem -> ../../archive/ssltest.fureweb.com/privkey1.pem -rw-r--r-- 1 root root 543 Aug 7 17:03 README ``` <br> 이제 ssltest.fureweb.com 이라는 도메인에 대한 ssl 요청을 처리하기위해 필요한 인증서가 준비된 상태가 되었습니다. nginx가 이 인증서를 통해 https 요청을 처리할 수 있도록, 아까 설정했던 conf 파일을 아래와 같이 수정해 보겠습니다. ```bash # 아래 명령어로 기존 설정파일 편집 $ vi /etc/nginx/conf.d/ssltest.fureweb.com.conf # 다음과 같은 형태가 되어야합니다. server { # http://ssltest.fureweb.com 요청에 대해 # https://ssltest.fureweb.com 으로 리다이렉트 처리합니다. listen 80; server_name ssltest.fureweb.com; return 301 https://ssltest.fureweb.com; } server { # https://ssltest.fureweb.com 으로의 요청을 리스닝합니다. listen 443; server_name ssltest.fureweb.com; ssl on; ssl_certificate /etc/letsencrypt/live/ssltest.fureweb.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/ssltest.fureweb.com/privkey.pem; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_ciphers HIGH:!aNULL:!MD5; # 예제에서는 이 외에 별도 설정을 추가하지 않고, SSL 요청이 정상적으로 처리되는지만 확인합니다. # 일반적으로 아래에는 현재 도메인과 연결된 document_root 등에 대한 설정 기술하거나 # proxy 설정을 통해 동적 처리가 가능한 다른 WAS와 연동하여 응답을 핸들링합니다. } ``` <br> 위 설정을 저장한 뒤, conf 파일에 오타는 없는지 확인하고 문제가 없다면 설정 내용을 적용시킵니다. ```bash # 설정 파일들에 오류가 없는지 확인한 뒤 $ nginx -t nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful # 오류가 없다면 설정 파일 내용을 적용합니다. $ nginx -s reload ``` <br> # 최종 확인 --- 브라우저의 주소창에 https://ssltest.fureweb.com를 입력하여 연결이 제대로 이뤄지는지 확인합니다. 브라우저 캐시로 인해 https로 리다이렉트 처리가 되지 않은 페이지를 보여줄 수 있으니, 크롬 기준으로 강력 새로고침을 실행시켜주세요. 브라우저 주소표시줄 좌측에 자물쇠가 활성화 된 모습을 확인하실 수 있게 됩니다. ~~주소가 ssltest2.fureweb.com인건 무시해주세요... -_-;~~ ![SSL 적용 완료](https://fureweb-com.github.io/assets/img/posts/20170807-ssl-connection.png) # 마치며 --- 우분투 서버를 생성하는 것 부터 Nginx 설치 및 설정, 그리고 SSL 적용하기까지 모든 과정에 대해 확인해 보았습니다. 혹시라도 본 포스트를 보고 막히는 부분이 있거나 설명이 부족한 부분이 있다면 언제든지 댓글이나 질문 부탁 드리겠습니다. 읽어주셔서 감사합니다!
json metadata{"tags":["kr","kr-dev","ssl","ubuntu","letsencrypt"],"image":["https://steemitimages.com/DQmT5UFQLESiCLNpXWp4EAyr2sTi5dZBphFoLYBzQ8v6CUd/20170807-nginx-status.png","https://fureweb-com.github.io/assets/img/posts/20170807-set-host-ip.png","https://fureweb-com.github.io/assets/img/posts/20170807-certbot-process.png","https://fureweb-com.github.io/assets/img/posts/20170807-ssl-connection.png"],"links":["https://fureweb-com.github.io/blog/2017/08/07/applying-free-ssl-to-your-ubuntu-server-using-nginx-and-let'sencrypt-from-scratch.html","http://www.mingw.org/","https://www.chiark.greenend.org.uk/~sgtatham/putty/latest.html","//iwinv.kr","https://ssltest.fureweb.com"],"app":"steemit/0.1","format":"markdown"}
parent author
parent permlinkssl
permlinknginx-ssl
title우분투에서 nginx 설치부터 무료 SSL 적용까지
Transaction InfoBlock #20094967/Trx 4fd749f5e7d2a7d564581e0d10394ac8aed48115
View Raw JSON Data
{
  "block": 20094967,
  "op": [
    "comment",
    {
      "author": "fureweb",
      "body": "# 들어가기 전에\n---\n1. 아직 아래 link들에 대해 새창 열기 기능이 steemit에서 지원되지 않는 것 같습니다. 혹시라도 아래에 등장하는 링크를 클릭하시려면 우클릭 후 새창에서 열어 확인해 주세요! \n2. 또한 syntax highlighting이 제대로 지원되지 않는 것 같아서, 혹시라도 보기 불편하신 점이 있다면 아래의 링크를 통해 원본 게시글을 확인하실 수도 있습니다.\n[https://fureweb-com.github.io/blog/2017/08/07/applying-free-ssl-to-your-ubuntu-server-using-nginx-and-let'sencrypt-from-scratch.html](https://fureweb-com.github.io/blog/2017/08/07/applying-free-ssl-to-your-ubuntu-server-using-nginx-and-let'sencrypt-from-scratch.html)\n\n# 개요\n---\n\n본 튜토리얼은 다음의 순서대로 진행됩니다.\n\n- 우분투 VPS 생성\n- nginx 설치 및 설정\n- 도메인 Host IP 설정 및 확인\n- Certbot 설치 및 설정\n- 최종 확인\n- 마치며\n\nwindows 환경에서 아래 예제를 실행하셔야 하는 분들은 [mingw](http://www.mingw.org/), [putty](https://www.chiark.greenend.org.uk/~sgtatham/putty/latest.html), windows 10 bash 등을 통해 bash shell을 사용하실 수 있습니다. 본 포스트의 내용은 로컬머신에서 bash shell을 사용할 수 있음을 전제하여 작성했습니다.  \n\n또한 vi를 사용할 수 있음을 전제하였으나, vi 사용이 어려우신 경우 nano에 대한 사용 방법을 검색하신 뒤 예제를 따라하시는 것을 추천드립니다. 그런 경우 아래에 표시한 vi 명령을 nano 명령으로 대신하시기 바랍니다.\n\n# 우분투 VPS 생성\n---\n\n자신이 사용할 수 있는 클라우드 서비스 내 VPS를 Ubuntu 16.04 LTS 버전으로 생성합니다. 저는 개인적으로 제가 알고있는 한 가장 간단하고 저렴하게 VPS를 생성할 수 있는 [iwinv.kr 클라우드 서비스](//iwinv.kr)를 이용하여 VPS를 생성하도록 하겠습니다.\n\n아래 예제에서는 Ubuntu 16.04 LTS(32bit) 버전으로 VPS를 생성하여 예제를 진행하게 됩니다. 편의상 root 계정으로 아래 예제를 수행하겠습니다.\n\n방화벽 설정과 관련된 부분은 이 포스팅의 주제를 벗어나므로, 가능하다면 VPS 생성 시 방화벽은 사용하지 않음으로 설정하셔서 예제를 실습하시기를 희망합니다.\n\n# nginx 설치 및 설정\n---\n\nssh 클라이언트를 이용하여 방금 막 생성한 VPS로 접속합니다. 접속 후 다음의 명령을 차례대로 실행하여 nginx를 서버에 설치한 뒤, 상태를 확인합니다.  \n\n```bash\n$ ssh root@your-vps-ip\n# 로그인 완료 후 아래 명령을 실행합니다.\n$ apt-get update\n$ apt-get install nginx\n```\n\n설치 후 nginx 실행 상태를 다음과 같이 확인할 수 있습니다.\n\n```bash\n$ service nginx status\n```\n  \n![nginx 설치 후 상태 확인](https://steemitimages.com/DQmT5UFQLESiCLNpXWp4EAyr2sTi5dZBphFoLYBzQ8v6CUd/20170807-nginx-status.png)\n  \n만약 현재 상태가 inactive라면, 다음의 명령을 통해 nginx 프로세스를 실행시킵니다.\n```bash\n$ service nginx start\n```\n  \n설치가 완료된 후 브라우저를 통해 서버의 IP를 입력하여 페이지를 요청하면 welcome to nginx 페이지를 확인할 수 있습니다. 만약 welcome 페이지를 볼수 없다면 방화벽 설정 문제일 가능성이 있습니다. 방화벽과 관련된 부분은 클라우드 서비스 업체마다 설정하는 방법이 다를 수 있으니, 사용하시는 업체의 방화벽 설정 사용 설명을 통해 http 요청을 위한 80번 포트 및 https 요청을 위한 443 포트를 열어둘 수 있도록 합니다.\n\n보유하고 있는 도메인을 현재 VPS로 연결시키기 전, 해당 도메인을 통해 본 서버로 http 요청을 해 오는 경우에 대해 처리할 수 있도록 다음과 같이 nginx 설정을 수행합니다.\n\n```bash\n# 다음의 경로로 이동하여 ssltest.fureweb.com 도메인 요청에 대한 설정파일을 생성합니다.\n# 아래 경로에 등록된 conf 확장자를 가진 모든 파일이 nginx.conf파일에 의해 include 되며, \n# nginx가 실행될 때 본 디렉토리 내 파일들이 해석되게 됩니다.\n$ cd /etc/nginx/conf.d\n\n# 원하는 도메인 명으로 설정 파일을 하나 생성합니다.\n$ vi ssltest.fureweb.com.conf\n```\n  \n아래의 내용을 ssltest.fureweb.com.conf 파일에 입력합니다.\n```bash\nserver {\n  listen 80;\n  server_name ssltest.fureweb.com;\n}\n```\n\n필요한 설정 파일을 생성하였다면, 다음의 명령을 통해 설정에 오타 등의 오류는 없는지 확인한 뒤 설정을 적용합니다.\n```bash\n# 설정 파일들에 오류가 없는지 확인한 뒤\n$ nginx -t\nnginx: the configuration file /etc/nginx/nginx.conf syntax is ok\nnginx: configuration file /etc/nginx/nginx.conf test is successful\n# 오류가 없다면 설정 파일 내용을 적용합니다.\n$ nginx -s reload\n```\n\n현재 VPS는 ssltest.fureweb.com에 대한 http 요청을 처리할 수 있는 상태가 되었습니다. 이제 자신이 가지고 있는 도메인 관리업체의 웹사이트에 로그인하여 해당 도메인에 대한 http 요청이 새로 만든 VPS로 전달될 수 있도록 별도의 설정을 진행해 보겠습니다.\n\n\n# 도메인 Host IP 설정 및 확인\n---\n\n본인이 보유하고있는 도메인을 관리하는 업체 사이트에 로그인하여, 자신이 보유한 도메인(또는 서브도메인)에 대한 Host IP를 설정합니다. \n\n예시로, 제가 보유하고 있는 ssltest.fureweb.com 이라는 서브도메인에 대한 http 요청이 방금 만든 VPS 서버로 연결되도록 설정을 추가하겠습니다. 도메인 등록 대행업체마다 설정하는 방법은 다를 수 있으니, 아래 사진을 참고하셔서 비슷한 메뉴에서 설정을 처리해주세요. 일반적으로 DNS 관리 메뉴의 하위 메뉴에서 설정하실 수 있습니다.\n\n![DNS 관리 메뉴 내 host ip 설정](https://fureweb-com.github.io/assets/img/posts/20170807-set-host-ip.png)\n\n만약 이전에 해당 도메인으로의 연결을 한 적이 있다면, 로컬 PC의 DNS캐시를 삭제해야합니다. 없다면 무시하셔도 됩니다.\n```bash\n# OSX 10.10.4 이상인 경우\n$ killall -HUP mDNSResponder\n\n# Windows 10을 사용하는 경우 - powershell 또는 cmd에서\nipconfig /flushdns\n\n# 죄송하지만 이 외에는 검색해 주세요 -_-;;\n```\n\n브라우저가 크롬이라면, 주소표시줄에 다음의 경로를 복사&붙여넣기하여 조회되는 화면에서 `Clear Host Cache` 버튼을 클릭하여 캐시를 삭제하세요.  \n```url\nchrome://net-internals/#dns\n```\n\n모든 설정에 문제가 없다면, 이제 웹 브라우저를 통해 내가 가지고 있는 도메인에 대한 연결 요청이 방금 만든 VPS로 전달되게 됩니다. 단, 도메인 관리 업체마다 해당 적용값이 얼마나 빨리 반영되는지는 차이가 있을 수 있으므로, 충분한 시간을 두고 확인을 진행해 주세요. 통상 1~2분 내에는 적용되는 걸로 알고 있으나, 다른 업체는 어떤지 사용해보지 않아서 잘 모르겠네요. ^^;\n\n# Certbot 설치 및 설정\n---\n\n먼저 certbot을 설치합니다.\n```bash\n$ add-apt-repository ppa:certbot/certbot\n```\n<br>\n해당 저장소에 담긴 패키지 정보를 확인할 수 있도록 다음과 같이 업데이트를 수행합니다.\n```bash\n$ apt-get update\n```\n<br>\n`apt-get`을 이용하여 Certbot을 설치합니다.\n```bash\n$ apt-get install python-certbot-nginx\n```\n<br>\n설치된 certbot을 이용하여 ssltest.fureweb.com 도메인에 대한 SSL 인증서만 발급받도록 합니다.\n\n```bash\n$ certbot certonly --nginx -d ssltest.fureweb.com\n# 위 명령을 실행하면 해당 도메인을 관리하는 사람의 이메일 주소를 입력하라고 나옵니다. 입력해 주세요.\n# 만료일에 대한 정보를 보내줍니다.\n# 약관에는 동의(A)하셔야 하며,\n# EFF 재단과의 이메일을 공유할지 여부를 묻는 부분에 대해서는 원하시는대로 진행하시면 됩니다.\n```\n<br>\n아래와 같은 메시지들이 출력됩니다.\n![Certbot 설정 과정](https://fureweb-com.github.io/assets/img/posts/20170807-certbot-process.png)\n\n위 명령을 수행하고 나면, 아래 경로에 총 5개의 파일이 생성되어 있음을 확인할 수 있습니다. (실제로는 /etc/letsencrypt/archive/도메인명 디렉토리 내 파일에 대한 심볼릭 링크 입니다.)\n```bash\n$ ls -al /etc/letsencrypt/live/ssltest.fureweb.com\ntotal 12\ndrwxr-xr-x 2 root root 4096 Aug  7 17:03 ./\ndrwx------ 4 root root 4096 Aug  7 16:56 ../\nlrwxrwxrwx 1 root root   43 Aug  7 17:03 cert.pem -> ../../archive/ssltest.fureweb.com/cert1.pem\nlrwxrwxrwx 1 root root   44 Aug  7 17:03 chain.pem -> ../../archive/ssltest.fureweb.com/chain1.pem\nlrwxrwxrwx 1 root root   48 Aug  7 17:03 fullchain.pem -> ../../archive/ssltest.fureweb.com/fullchain1.pem\nlrwxrwxrwx 1 root root   46 Aug  7 17:03 privkey.pem -> ../../archive/ssltest.fureweb.com/privkey1.pem\n-rw-r--r-- 1 root root  543 Aug  7 17:03 README\n```\n<br>\n이제 ssltest.fureweb.com 이라는 도메인에 대한 ssl 요청을 처리하기위해 필요한 인증서가 준비된 상태가 되었습니다. nginx가 이 인증서를 통해 https 요청을 처리할 수 있도록, 아까 설정했던 conf 파일을 아래와 같이 수정해 보겠습니다.  \n\n```bash\n# 아래 명령어로 기존 설정파일 편집\n$ vi /etc/nginx/conf.d/ssltest.fureweb.com.conf\n\n# 다음과 같은 형태가 되어야합니다.\nserver {\n    # http://ssltest.fureweb.com 요청에 대해\n    # https://ssltest.fureweb.com 으로 리다이렉트 처리합니다. \n    listen 80;\n    server_name ssltest.fureweb.com;\n    return 301 https://ssltest.fureweb.com;\n}\n\nserver {\n    # https://ssltest.fureweb.com 으로의 요청을 리스닝합니다.\n    listen 443;\n    server_name ssltest.fureweb.com;\n\n    ssl on;\n    ssl_certificate /etc/letsencrypt/live/ssltest.fureweb.com/fullchain.pem;\n    ssl_certificate_key /etc/letsencrypt/live/ssltest.fureweb.com/privkey.pem;\n\n    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;\n    ssl_ciphers HIGH:!aNULL:!MD5;\n\n    # 예제에서는 이 외에 별도 설정을 추가하지 않고, SSL 요청이 정상적으로 처리되는지만 확인합니다.\n    # 일반적으로 아래에는 현재 도메인과 연결된 document_root 등에 대한 설정 기술하거나\n    # proxy 설정을 통해 동적 처리가 가능한 다른 WAS와 연동하여 응답을 핸들링합니다.\n}\n\n```\n<br>\n위 설정을 저장한 뒤, conf 파일에 오타는 없는지 확인하고 문제가 없다면 설정 내용을 적용시킵니다.\n\n```bash\n# 설정 파일들에 오류가 없는지 확인한 뒤\n$ nginx -t\nnginx: the configuration file /etc/nginx/nginx.conf syntax is ok\nnginx: configuration file /etc/nginx/nginx.conf test is successful\n# 오류가 없다면 설정 파일 내용을 적용합니다.\n$ nginx -s reload\n```\n<br>\n\n# 최종 확인\n---\n\n브라우저의 주소창에 https://ssltest.fureweb.com를 입력하여 연결이 제대로 이뤄지는지 확인합니다. 브라우저 캐시로 인해 https로 리다이렉트 처리가 되지 않은 페이지를 보여줄 수 있으니, 크롬 기준으로 강력 새로고침을 실행시켜주세요.\n\n브라우저 주소표시줄 좌측에 자물쇠가 활성화 된 모습을 확인하실 수 있게 됩니다.  \n~~주소가 ssltest2.fureweb.com인건 무시해주세요... -_-;~~\n\n![SSL 적용 완료](https://fureweb-com.github.io/assets/img/posts/20170807-ssl-connection.png)\n\n\n# 마치며\n---\n\n우분투 서버를 생성하는 것 부터 Nginx 설치 및 설정, 그리고 SSL 적용하기까지 모든 과정에 대해 확인해 보았습니다. 혹시라도 본 포스트를 보고 막히는 부분이 있거나 설명이 부족한 부분이 있다면 언제든지 댓글이나 질문 부탁 드리겠습니다.  \n\n읽어주셔서 감사합니다!",
      "json_metadata": "{\"tags\":[\"kr\",\"kr-dev\",\"ssl\",\"ubuntu\",\"letsencrypt\"],\"image\":[\"https://steemitimages.com/DQmT5UFQLESiCLNpXWp4EAyr2sTi5dZBphFoLYBzQ8v6CUd/20170807-nginx-status.png\",\"https://fureweb-com.github.io/assets/img/posts/20170807-set-host-ip.png\",\"https://fureweb-com.github.io/assets/img/posts/20170807-certbot-process.png\",\"https://fureweb-com.github.io/assets/img/posts/20170807-ssl-connection.png\"],\"links\":[\"https://fureweb-com.github.io/blog/2017/08/07/applying-free-ssl-to-your-ubuntu-server-using-nginx-and-let'sencrypt-from-scratch.html\",\"http://www.mingw.org/\",\"https://www.chiark.greenend.org.uk/~sgtatham/putty/latest.html\",\"//iwinv.kr\",\"https://ssltest.fureweb.com\"],\"app\":\"steemit/0.1\",\"format\":\"markdown\"}",
      "parent_author": "",
      "parent_permlink": "ssl",
      "permlink": "nginx-ssl",
      "title": "우분투에서 nginx 설치부터 무료 SSL 적용까지"
    }
  ],
  "op_in_trx": 0,
  "timestamp": "2018-02-22T14:26:57",
  "trx_id": "4fd749f5e7d2a7d564581e0d10394ac8aed48115",
  "trx_in_block": 31,
  "virtual_op": 0
}
furewebpublished a new post: nginx-ssl
2018/02/22 14:19:30
authorfureweb
body# 들어가기 전에 --- 1. 아직 아래 link들에 대해 새창 열기 기능이 steemit에서 지원되지 않는 것 같습니다. 혹시라도 아래에 등장하는 링크를 클릭하시려면 우클릭 후 새창에서 열어 확인해 주세요! 2. 또한 syntax highlighting이 제대로 지원되지 않는 것 같아서, 혹시라도 보기 불편하신 점이 있다면 아래의 링크를 통해 원본 게시글을 확인하실 수도 있습니다. [https://fureweb-com.github.io/blog/2017/08/07/applying-free-ssl-to-your-ubuntu-server-using-nginx-and-let'sencrypt-from-scratch.html](https://fureweb-com.github.io/blog/2017/08/07/applying-free-ssl-to-your-ubuntu-server-using-nginx-and-let'sencrypt-from-scratch.html) # 개요 --- 본 튜토리얼은 다음의 순서대로 진행됩니다. - 우분투 VPS 생성 - nginx 설치 및 설정 - 도메인 Host IP 설정 및 확인 - Certbot 설치 및 설정 - 최종 확인 - 마치며 windows 환경에서 아래 예제를 실행하셔야 하는 분들은 [mingw](http://www.mingw.org/), [putty](https://www.chiark.greenend.org.uk/~sgtatham/putty/latest.html), windows 10 bash 등을 통해 bash shell을 사용하실 수 있습니다. 본 포스트의 내용은 로컬머신에서 bash shell을 사용할 수 있음을 전제하여 작성했습니다. 또한 vi를 사용할 수 있음을 전제하였으나, vi 사용이 어려우신 경우 nano에 대한 사용 방법을 검색하신 뒤 예제를 따라하시는 것을 추천드립니다. 그런 경우 아래에 표시한 vi 명령을 nano 명령으로 대신하시기 바랍니다. # 우분투 VPS 생성 --- 자신이 사용할 수 있는 클라우드 서비스 내 VPS를 Ubuntu 16.04 LTS 버전으로 생성합니다. 저는 개인적으로 제가 알고있는 한 가장 간단하고 저렴하게 VPS를 생성할 수 있는 [iwinv.kr 클라우드 서비스](//iwinv.kr)를 이용하여 VPS를 생성하도록 하겠습니다. 아래 예제에서는 Ubuntu 16.04 LTS(32bit) 버전으로 VPS를 생성하여 예제를 진행하게 됩니다. 편의상 root 계정으로 아래 예제를 수행하겠습니다. 방화벽 설정과 관련된 부분은 이 포스팅의 주제를 벗어나므로, 가능하다면 VPS 생성 시 방화벽은 사용하지 않음으로 설정하셔서 예제를 실습하시기를 희망합니다. # nginx 설치 및 설정 --- ssh 클라이언트를 이용하여 방금 막 생성한 VPS로 접속합니다. 접속 후 다음의 명령을 차례대로 실행하여 nginx를 서버에 설치한 뒤, 상태를 확인합니다. ```bash $ ssh root@your-vps-ip # 로그인 완료 후 아래 명령을 실행합니다. $ apt-get update $ apt-get install nginx ``` 설치 후 nginx 실행 상태를 다음과 같이 확인할 수 있습니다. ```bash $ service nginx status ``` ![nginx 설치 후 상태 확인](https://steemitimages.com/DQmT5UFQLESiCLNpXWp4EAyr2sTi5dZBphFoLYBzQ8v6CUd/20170807-nginx-status.png) 만약 현재 상태가 inactive라면, 다음의 명령을 통해 nginx 프로세스를 실행시킵니다. ```bash $ service nginx start ``` 설치가 완료된 후 브라우저를 통해 서버의 IP를 입력하여 페이지를 요청하면 welcome to nginx 페이지를 확인할 수 있습니다. 만약 welcome 페이지를 볼수 없다면 방화벽 설정 문제일 가능성이 있습니다. 방화벽과 관련된 부분은 클라우드 서비스 업체마다 설정하는 방법이 다를 수 있으니, 사용하시는 업체의 방화벽 설정 사용 설명을 통해 http 요청을 위한 80번 포트 및 https 요청을 위한 443 포트를 열어둘 수 있도록 합니다. 보유하고 있는 도메인을 현재 VPS로 연결시키기 전, 해당 도메인을 통해 본 서버로 http 요청을 해 오는 경우에 대해 처리할 수 있도록 다음과 같이 nginx 설정을 수행합니다. ```bash # 다음의 경로로 이동하여 ssltest.fureweb.com 도메인 요청에 대한 설정파일을 생성합니다. # 아래 경로에 등록된 conf 확장자를 가진 모든 파일이 nginx.conf파일에 의해 include 되며, # nginx가 실행될 때 본 디렉토리 내 파일들이 해석되게 됩니다. $ cd /etc/nginx/conf.d # 원하는 도메인 명으로 설정 파일을 하나 생성합니다. $ vi ssltest.fureweb.com.conf ``` 아래의 내용을 ssltest.fureweb.com.conf 파일에 입력합니다. ```bash server { listen 80; server_name ssltest.fureweb.com; } ``` 필요한 설정 파일을 생성하였다면, 다음의 명령을 통해 설정에 오타 등의 오류는 없는지 확인한 뒤 설정을 적용합니다. ```bash # 설정 파일들에 오류가 없는지 확인한 뒤 $ nginx -t nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful # 오류가 없다면 설정 파일 내용을 적용합니다. $ nginx -s reload ``` 현재 VPS는 ssltest.fureweb.com에 대한 http 요청을 처리할 수 있는 상태가 되었습니다. 이제 자신이 가지고 있는 도메인 관리업체의 웹사이트에 로그인하여 해당 도메인에 대한 http 요청이 새로 만든 VPS로 전달될 수 있도록 별도의 설정을 진행해 보겠습니다. # 도메인 Host IP 설정 및 확인 --- 본인이 보유하고있는 도메인을 관리하는 업체 사이트에 로그인하여, 자신이 보유한 도메인(또는 서브도메인)에 대한 Host IP를 설정합니다. 예시로, 제가 보유하고 있는 ssltest.fureweb.com 이라는 서브도메인에 대한 http 요청이 방금 만든 VPS 서버로 연결되도록 설정을 추가하겠습니다. 도메인 등록 대행업체마다 설정하는 방법은 다를 수 있으니, 아래 사진을 참고하셔서 비슷한 메뉴에서 설정을 처리해주세요. 일반적으로 DNS 관리 메뉴의 하위 메뉴에서 설정하실 수 있습니다. ![DNS 관리 메뉴 내 host ip 설정](https://fureweb-com.github.io/assets/img/posts/20170807-set-host-ip.png) 만약 이전에 해당 도메인으로의 연결을 한 적이 있다면, 로컬 PC의 DNS캐시를 삭제해야합니다. 없다면 무시하셔도 됩니다. ```bash # OSX 10.10.4 이상인 경우 $ killall -HUP mDNSResponder # Windows 10을 사용하는 경우 - powershell 또는 cmd에서 ipconfig /flushdns # 죄송하지만 이 외에는 검색해 주세요 -_-;; ``` 브라우저가 크롬이라면, 주소표시줄에 다음의 경로를 복사&붙여넣기하여 조회되는 화면에서 `Clear Host Cache` 버튼을 클릭하여 캐시를 삭제하세요. ```url chrome://net-internals/#dns ``` 모든 설정에 문제가 없다면, 이제 웹 브라우저를 통해 내가 가지고 있는 도메인에 대한 연결 요청이 방금 만든 VPS로 전달되게 됩니다. 단, 도메인 관리 업체마다 해당 적용값이 얼마나 빨리 반영되는지는 차이가 있을 수 있으므로, 충분한 시간을 두고 확인을 진행해 주세요. 통상 1~2분 내에는 적용되는 걸로 알고 있으나, 다른 업체는 어떤지 사용해보지 않아서 잘 모르겠네요. ^^; # Certbot 설치 및 설정 --- 먼저 certbot을 설치합니다. ```bash $ add-apt-repository ppa:certbot/certbot ``` <br> 해당 저장소에 담긴 패키지 정보를 확인할 수 있도록 다음과 같이 업데이트를 수행합니다. ```bash $ apt-get update ``` <br> `apt-get`을 이용하여 Certbot을 설치합니다. ```bash $ apt-get install python-certbot-nginx ``` <br> 설치된 certbot을 이용하여 ssltest.fureweb.com 도메인에 대한 SSL 인증서만 발급받도록 합니다. ```bash $ certbot certonly --nginx -d ssltest.fureweb.com # 위 명령을 실행하면 해당 도메인을 관리하는 사람의 이메일 주소를 입력하라고 나옵니다. 입력해 주세요. # 만료일에 대한 정보를 보내줍니다. # 약관에는 동의(A)하셔야 하며, # EFF 재단과의 이메일을 공유할지 여부를 묻는 부분에 대해서는 원하시는대로 진행하시면 됩니다. ``` <br> 아래와 같은 메시지들이 출력됩니다. ![Certbot 설정 과정](https://fureweb-com.github.io/assets/img/posts/20170807-certbot-process.png) 위 명령을 수행하고 나면, 아래 경로에 총 5개의 파일이 생성되어 있음을 확인할 수 있습니다. (실제로는 /etc/letsencrypt/archive/도메인명 디렉토리 내 파일에 대한 심볼릭 링크 입니다.) ```bash $ ls -al /etc/letsencrypt/live/ssltest.fureweb.com total 12 drwxr-xr-x 2 root root 4096 Aug 7 17:03 ./ drwx------ 4 root root 4096 Aug 7 16:56 ../ lrwxrwxrwx 1 root root 43 Aug 7 17:03 cert.pem -> ../../archive/ssltest.fureweb.com/cert1.pem lrwxrwxrwx 1 root root 44 Aug 7 17:03 chain.pem -> ../../archive/ssltest.fureweb.com/chain1.pem lrwxrwxrwx 1 root root 48 Aug 7 17:03 fullchain.pem -> ../../archive/ssltest.fureweb.com/fullchain1.pem lrwxrwxrwx 1 root root 46 Aug 7 17:03 privkey.pem -> ../../archive/ssltest.fureweb.com/privkey1.pem -rw-r--r-- 1 root root 543 Aug 7 17:03 README ``` <br> 이제 ssltest.fureweb.com 이라는 도메인에 대한 ssl 요청을 처리하기위해 필요한 인증서가 준비된 상태가 되었습니다. nginx가 이 인증서를 통해 https 요청을 처리할 수 있도록, 아까 설정했던 conf 파일을 아래와 같이 수정해 보겠습니다. ```bash # 아래 명령어로 기존 설정파일 편집 $ vi /etc/nginx/conf.d/ssltest.fureweb.com.conf # 다음과 같은 형태가 되어야합니다. server { # http://ssltest.fureweb.com 요청에 대해 # https://ssltest.fureweb.com 으로 리다이렉트 처리합니다. listen 80; server_name ssltest.fureweb.com; return 301 https://ssltest.fureweb.com; } server { # https://ssltest.fureweb.com 으로의 요청을 리스닝합니다. listen 443; server_name ssltest.fureweb.com; ssl on; ssl_certificate /etc/letsencrypt/live/ssltest.fureweb.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/ssltest.fureweb.com/privkey.pem; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_ciphers HIGH:!aNULL:!MD5; # 예제에서는 이 외에 별도 설정을 추가하지 않고, SSL 요청이 정상적으로 처리되는지만 확인합니다. # 일반적으로 아래에는 현재 도메인과 연결된 document_root 등에 대한 설정 기술하거나 # proxy 설정을 통해 동적 처리가 가능한 다른 WAS와 연동하여 응답을 핸들링합니다. } ``` <br> 위 설정을 저장한 뒤, conf 파일에 오타는 없는지 확인하고 문제가 없다면 설정 내용을 적용시킵니다. ```bash # 설정 파일들에 오류가 없는지 확인한 뒤 $ nginx -t nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful # 오류가 없다면 설정 파일 내용을 적용합니다. $ nginx -s reload ``` <br> # 최종 확인 --- 브라우저의 주소창에 https://ssltest.fureweb.com를 입력하여 연결이 제대로 이뤄지는지 확인합니다. 브라우저 캐시로 인해 https로 리다이렉트 처리가 되지 않은 페이지를 보여줄 수 있으니, 크롬 기준으로 강력 새로고침을 실행시켜주세요. 브라우저 주소표시줄 좌측에 자물쇠가 활성화 된 모습을 확인하실 수 있게 됩니다. ~~주소가 ssltest2.fureweb.com인건 무시해주세요... -_-;~~ ![SSL 적용 완료](https://fureweb-com.github.io/assets/img/posts/20170807-ssl-connection.png) # 마치며 --- 우분투 서버를 생성하는 것 부터 Nginx 설치 및 설정, 그리고 SSL 적용하기까지 모든 과정에 대해 확인해 보았습니다. 혹시라도 본 포스트를 보고 막히는 부분이 있거나 설명이 부족한 부분이 있다면 언제든지 댓글이나 질문 부탁 드리겠습니다. 읽어주셔서 감사합니다!
json metadata{"tags":["ssl"],"image":["https://steemitimages.com/DQmT5UFQLESiCLNpXWp4EAyr2sTi5dZBphFoLYBzQ8v6CUd/20170807-nginx-status.png","https://fureweb-com.github.io/assets/img/posts/20170807-set-host-ip.png","https://fureweb-com.github.io/assets/img/posts/20170807-certbot-process.png","https://fureweb-com.github.io/assets/img/posts/20170807-ssl-connection.png"],"links":["https://fureweb-com.github.io/blog/2017/08/07/applying-free-ssl-to-your-ubuntu-server-using-nginx-and-let'sencrypt-from-scratch.html","http://www.mingw.org/","https://www.chiark.greenend.org.uk/~sgtatham/putty/latest.html","//iwinv.kr","https://ssltest.fureweb.com"],"app":"steemit/0.1","format":"markdown"}
parent author
parent permlinkssl
permlinknginx-ssl
title우분투에서 nginx 설치부터 무료 SSL 적용까지
Transaction InfoBlock #20094818/Trx 8d68ff31d9d65c592cd1286e9aceb94ee853d543
View Raw JSON Data
{
  "block": 20094818,
  "op": [
    "comment",
    {
      "author": "fureweb",
      "body": "# 들어가기 전에\n---\n1. 아직 아래 link들에 대해 새창 열기 기능이 steemit에서 지원되지 않는 것 같습니다. 혹시라도 아래에 등장하는 링크를 클릭하시려면 우클릭 후 새창에서 열어 확인해 주세요! \n2. 또한 syntax highlighting이 제대로 지원되지 않는 것 같아서, 혹시라도 보기 불편하신 점이 있다면 아래의 링크를 통해 원본 게시글을 확인하실 수도 있습니다.\n[https://fureweb-com.github.io/blog/2017/08/07/applying-free-ssl-to-your-ubuntu-server-using-nginx-and-let'sencrypt-from-scratch.html](https://fureweb-com.github.io/blog/2017/08/07/applying-free-ssl-to-your-ubuntu-server-using-nginx-and-let'sencrypt-from-scratch.html)\n\n# 개요\n---\n\n본 튜토리얼은 다음의 순서대로 진행됩니다.\n\n- 우분투 VPS 생성\n- nginx 설치 및 설정\n- 도메인 Host IP 설정 및 확인\n- Certbot 설치 및 설정\n- 최종 확인\n- 마치며\n\nwindows 환경에서 아래 예제를 실행하셔야 하는 분들은 [mingw](http://www.mingw.org/), [putty](https://www.chiark.greenend.org.uk/~sgtatham/putty/latest.html), windows 10 bash 등을 통해 bash shell을 사용하실 수 있습니다. 본 포스트의 내용은 로컬머신에서 bash shell을 사용할 수 있음을 전제하여 작성했습니다.  \n\n또한 vi를 사용할 수 있음을 전제하였으나, vi 사용이 어려우신 경우 nano에 대한 사용 방법을 검색하신 뒤 예제를 따라하시는 것을 추천드립니다. 그런 경우 아래에 표시한 vi 명령을 nano 명령으로 대신하시기 바랍니다.\n\n# 우분투 VPS 생성\n---\n\n자신이 사용할 수 있는 클라우드 서비스 내 VPS를 Ubuntu 16.04 LTS 버전으로 생성합니다. 저는 개인적으로 제가 알고있는 한 가장 간단하고 저렴하게 VPS를 생성할 수 있는 [iwinv.kr 클라우드 서비스](//iwinv.kr)를 이용하여 VPS를 생성하도록 하겠습니다.\n\n아래 예제에서는 Ubuntu 16.04 LTS(32bit) 버전으로 VPS를 생성하여 예제를 진행하게 됩니다. 편의상 root 계정으로 아래 예제를 수행하겠습니다.\n\n방화벽 설정과 관련된 부분은 이 포스팅의 주제를 벗어나므로, 가능하다면 VPS 생성 시 방화벽은 사용하지 않음으로 설정하셔서 예제를 실습하시기를 희망합니다.\n\n# nginx 설치 및 설정\n---\n\nssh 클라이언트를 이용하여 방금 막 생성한 VPS로 접속합니다. 접속 후 다음의 명령을 차례대로 실행하여 nginx를 서버에 설치한 뒤, 상태를 확인합니다.  \n\n```bash\n$ ssh root@your-vps-ip\n# 로그인 완료 후 아래 명령을 실행합니다.\n$ apt-get update\n$ apt-get install nginx\n```\n\n설치 후 nginx 실행 상태를 다음과 같이 확인할 수 있습니다.\n\n```bash\n$ service nginx status\n```\n  \n![nginx 설치 후 상태 확인](https://steemitimages.com/DQmT5UFQLESiCLNpXWp4EAyr2sTi5dZBphFoLYBzQ8v6CUd/20170807-nginx-status.png)\n  \n만약 현재 상태가 inactive라면, 다음의 명령을 통해 nginx 프로세스를 실행시킵니다.\n```bash\n$ service nginx start\n```\n  \n설치가 완료된 후 브라우저를 통해 서버의 IP를 입력하여 페이지를 요청하면 welcome to nginx 페이지를 확인할 수 있습니다. 만약 welcome 페이지를 볼수 없다면 방화벽 설정 문제일 가능성이 있습니다. 방화벽과 관련된 부분은 클라우드 서비스 업체마다 설정하는 방법이 다를 수 있으니, 사용하시는 업체의 방화벽 설정 사용 설명을 통해 http 요청을 위한 80번 포트 및 https 요청을 위한 443 포트를 열어둘 수 있도록 합니다.\n\n보유하고 있는 도메인을 현재 VPS로 연결시키기 전, 해당 도메인을 통해 본 서버로 http 요청을 해 오는 경우에 대해 처리할 수 있도록 다음과 같이 nginx 설정을 수행합니다.\n\n```bash\n# 다음의 경로로 이동하여 ssltest.fureweb.com 도메인 요청에 대한 설정파일을 생성합니다.\n# 아래 경로에 등록된 conf 확장자를 가진 모든 파일이 nginx.conf파일에 의해 include 되며, \n# nginx가 실행될 때 본 디렉토리 내 파일들이 해석되게 됩니다.\n$ cd /etc/nginx/conf.d\n\n# 원하는 도메인 명으로 설정 파일을 하나 생성합니다.\n$ vi ssltest.fureweb.com.conf\n```\n  \n아래의 내용을 ssltest.fureweb.com.conf 파일에 입력합니다.\n```bash\nserver {\n  listen 80;\n  server_name ssltest.fureweb.com;\n}\n```\n\n필요한 설정 파일을 생성하였다면, 다음의 명령을 통해 설정에 오타 등의 오류는 없는지 확인한 뒤 설정을 적용합니다.\n```bash\n# 설정 파일들에 오류가 없는지 확인한 뒤\n$ nginx -t\nnginx: the configuration file /etc/nginx/nginx.conf syntax is ok\nnginx: configuration file /etc/nginx/nginx.conf test is successful\n# 오류가 없다면 설정 파일 내용을 적용합니다.\n$ nginx -s reload\n```\n\n현재 VPS는 ssltest.fureweb.com에 대한 http 요청을 처리할 수 있는 상태가 되었습니다. 이제 자신이 가지고 있는 도메인 관리업체의 웹사이트에 로그인하여 해당 도메인에 대한 http 요청이 새로 만든 VPS로 전달될 수 있도록 별도의 설정을 진행해 보겠습니다.\n\n\n# 도메인 Host IP 설정 및 확인\n---\n\n본인이 보유하고있는 도메인을 관리하는 업체 사이트에 로그인하여, 자신이 보유한 도메인(또는 서브도메인)에 대한 Host IP를 설정합니다. \n\n예시로, 제가 보유하고 있는 ssltest.fureweb.com 이라는 서브도메인에 대한 http 요청이 방금 만든 VPS 서버로 연결되도록 설정을 추가하겠습니다. 도메인 등록 대행업체마다 설정하는 방법은 다를 수 있으니, 아래 사진을 참고하셔서 비슷한 메뉴에서 설정을 처리해주세요. 일반적으로 DNS 관리 메뉴의 하위 메뉴에서 설정하실 수 있습니다.\n\n![DNS 관리 메뉴 내 host ip 설정](https://fureweb-com.github.io/assets/img/posts/20170807-set-host-ip.png)\n\n만약 이전에 해당 도메인으로의 연결을 한 적이 있다면, 로컬 PC의 DNS캐시를 삭제해야합니다. 없다면 무시하셔도 됩니다.\n```bash\n# OSX 10.10.4 이상인 경우\n$ killall -HUP mDNSResponder\n\n# Windows 10을 사용하는 경우 - powershell 또는 cmd에서\nipconfig /flushdns\n\n# 죄송하지만 이 외에는 검색해 주세요 -_-;;\n```\n\n브라우저가 크롬이라면, 주소표시줄에 다음의 경로를 복사&붙여넣기하여 조회되는 화면에서 `Clear Host Cache` 버튼을 클릭하여 캐시를 삭제하세요.  \n```url\nchrome://net-internals/#dns\n```\n\n모든 설정에 문제가 없다면, 이제 웹 브라우저를 통해 내가 가지고 있는 도메인에 대한 연결 요청이 방금 만든 VPS로 전달되게 됩니다. 단, 도메인 관리 업체마다 해당 적용값이 얼마나 빨리 반영되는지는 차이가 있을 수 있으므로, 충분한 시간을 두고 확인을 진행해 주세요. 통상 1~2분 내에는 적용되는 걸로 알고 있으나, 다른 업체는 어떤지 사용해보지 않아서 잘 모르겠네요. ^^;\n\n# Certbot 설치 및 설정\n---\n\n먼저 certbot을 설치합니다.\n```bash\n$ add-apt-repository ppa:certbot/certbot\n```\n<br>\n해당 저장소에 담긴 패키지 정보를 확인할 수 있도록 다음과 같이 업데이트를 수행합니다.\n```bash\n$ apt-get update\n```\n<br>\n`apt-get`을 이용하여 Certbot을 설치합니다.\n```bash\n$ apt-get install python-certbot-nginx\n```\n<br>\n설치된 certbot을 이용하여 ssltest.fureweb.com 도메인에 대한 SSL 인증서만 발급받도록 합니다.\n\n```bash\n$ certbot certonly --nginx -d ssltest.fureweb.com\n# 위 명령을 실행하면 해당 도메인을 관리하는 사람의 이메일 주소를 입력하라고 나옵니다. 입력해 주세요.\n# 만료일에 대한 정보를 보내줍니다.\n# 약관에는 동의(A)하셔야 하며,\n# EFF 재단과의 이메일을 공유할지 여부를 묻는 부분에 대해서는 원하시는대로 진행하시면 됩니다.\n```\n<br>\n아래와 같은 메시지들이 출력됩니다.\n![Certbot 설정 과정](https://fureweb-com.github.io/assets/img/posts/20170807-certbot-process.png)\n\n위 명령을 수행하고 나면, 아래 경로에 총 5개의 파일이 생성되어 있음을 확인할 수 있습니다. (실제로는 /etc/letsencrypt/archive/도메인명 디렉토리 내 파일에 대한 심볼릭 링크 입니다.)\n```bash\n$ ls -al /etc/letsencrypt/live/ssltest.fureweb.com\ntotal 12\ndrwxr-xr-x 2 root root 4096 Aug  7 17:03 ./\ndrwx------ 4 root root 4096 Aug  7 16:56 ../\nlrwxrwxrwx 1 root root   43 Aug  7 17:03 cert.pem -> ../../archive/ssltest.fureweb.com/cert1.pem\nlrwxrwxrwx 1 root root   44 Aug  7 17:03 chain.pem -> ../../archive/ssltest.fureweb.com/chain1.pem\nlrwxrwxrwx 1 root root   48 Aug  7 17:03 fullchain.pem -> ../../archive/ssltest.fureweb.com/fullchain1.pem\nlrwxrwxrwx 1 root root   46 Aug  7 17:03 privkey.pem -> ../../archive/ssltest.fureweb.com/privkey1.pem\n-rw-r--r-- 1 root root  543 Aug  7 17:03 README\n```\n<br>\n이제 ssltest.fureweb.com 이라는 도메인에 대한 ssl 요청을 처리하기위해 필요한 인증서가 준비된 상태가 되었습니다. nginx가 이 인증서를 통해 https 요청을 처리할 수 있도록, 아까 설정했던 conf 파일을 아래와 같이 수정해 보겠습니다.  \n\n```bash\n# 아래 명령어로 기존 설정파일 편집\n$ vi /etc/nginx/conf.d/ssltest.fureweb.com.conf\n\n# 다음과 같은 형태가 되어야합니다.\nserver {\n    # http://ssltest.fureweb.com 요청에 대해\n    # https://ssltest.fureweb.com 으로 리다이렉트 처리합니다. \n    listen 80;\n    server_name ssltest.fureweb.com;\n    return 301 https://ssltest.fureweb.com;\n}\n\nserver {\n    # https://ssltest.fureweb.com 으로의 요청을 리스닝합니다.\n    listen 443;\n    server_name ssltest.fureweb.com;\n\n    ssl on;\n    ssl_certificate /etc/letsencrypt/live/ssltest.fureweb.com/fullchain.pem;\n    ssl_certificate_key /etc/letsencrypt/live/ssltest.fureweb.com/privkey.pem;\n\n    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;\n    ssl_ciphers HIGH:!aNULL:!MD5;\n\n    # 예제에서는 이 외에 별도 설정을 추가하지 않고, SSL 요청이 정상적으로 처리되는지만 확인합니다.\n    # 일반적으로 아래에는 현재 도메인과 연결된 document_root 등에 대한 설정 기술하거나\n    # proxy 설정을 통해 동적 처리가 가능한 다른 WAS와 연동하여 응답을 핸들링합니다.\n}\n\n```\n<br>\n위 설정을 저장한 뒤, conf 파일에 오타는 없는지 확인하고 문제가 없다면 설정 내용을 적용시킵니다.\n\n```bash\n# 설정 파일들에 오류가 없는지 확인한 뒤\n$ nginx -t\nnginx: the configuration file /etc/nginx/nginx.conf syntax is ok\nnginx: configuration file /etc/nginx/nginx.conf test is successful\n# 오류가 없다면 설정 파일 내용을 적용합니다.\n$ nginx -s reload\n```\n<br>\n\n# 최종 확인\n---\n\n브라우저의 주소창에 https://ssltest.fureweb.com를 입력하여 연결이 제대로 이뤄지는지 확인합니다. 브라우저 캐시로 인해 https로 리다이렉트 처리가 되지 않은 페이지를 보여줄 수 있으니, 크롬 기준으로 강력 새로고침을 실행시켜주세요.\n\n브라우저 주소표시줄 좌측에 자물쇠가 활성화 된 모습을 확인하실 수 있게 됩니다.  \n~~주소가 ssltest2.fureweb.com인건 무시해주세요... -_-;~~\n\n![SSL 적용 완료](https://fureweb-com.github.io/assets/img/posts/20170807-ssl-connection.png)\n\n\n# 마치며\n---\n\n우분투 서버를 생성하는 것 부터 Nginx 설치 및 설정, 그리고 SSL 적용하기까지 모든 과정에 대해 확인해 보았습니다. 혹시라도 본 포스트를 보고 막히는 부분이 있거나 설명이 부족한 부분이 있다면 언제든지 댓글이나 질문 부탁 드리겠습니다.  \n\n읽어주셔서 감사합니다!",
      "json_metadata": "{\"tags\":[\"ssl\"],\"image\":[\"https://steemitimages.com/DQmT5UFQLESiCLNpXWp4EAyr2sTi5dZBphFoLYBzQ8v6CUd/20170807-nginx-status.png\",\"https://fureweb-com.github.io/assets/img/posts/20170807-set-host-ip.png\",\"https://fureweb-com.github.io/assets/img/posts/20170807-certbot-process.png\",\"https://fureweb-com.github.io/assets/img/posts/20170807-ssl-connection.png\"],\"links\":[\"https://fureweb-com.github.io/blog/2017/08/07/applying-free-ssl-to-your-ubuntu-server-using-nginx-and-let'sencrypt-from-scratch.html\",\"http://www.mingw.org/\",\"https://www.chiark.greenend.org.uk/~sgtatham/putty/latest.html\",\"//iwinv.kr\",\"https://ssltest.fureweb.com\"],\"app\":\"steemit/0.1\",\"format\":\"markdown\"}",
      "parent_author": "",
      "parent_permlink": "ssl",
      "permlink": "nginx-ssl",
      "title": "우분투에서 nginx 설치부터 무료 SSL 적용까지"
    }
  ],
  "op_in_trx": 0,
  "timestamp": "2018-02-22T14:19:30",
  "trx_id": "8d68ff31d9d65c592cd1286e9aceb94ee853d543",
  "trx_in_block": 36,
  "virtual_op": 0
}
furewebpublished a new post: nginx-ssl
2018/02/22 14:19:09
authorfureweb
body# 들어가기 전에 --- 1. 아직 아래 link들에 대해 새창 열기 기능이 steemit에서 지원되지 않는 것 같습니다. 혹시라도 아래에 등장하는 링크를 클릭하시려면 우클릭 후 새창에서 열어 확인해 주세요! 2. 또한 syntax highlighting이 제대로 지원되지 않는 것 같아서, 혹시라도 보기 불편하신 점이 있다면 아래의 링크를 통해 원본 게시글을 확인하실 수도 있습니다. [https://fureweb-com.github.io/blog/2017/08/07/applying-free-ssl-to-your-ubuntu-server-using-nginx-and-let'sencrypt-from-scratch.html](https://fureweb-com.github.io/blog/2017/08/07/applying-free-ssl-to-your-ubuntu-server-using-nginx-and-let'sencrypt-from-scratch.html) # 개요 --- 본 튜토리얼은 다음의 순서대로 진행됩니다. - 우분투 VPS 생성 - nginx 설치 및 설정 - 도메인 Host IP 설정 및 확인 - Certbot 설치 및 설정 - 최종 확인 - 마치며 windows 환경에서 아래 예제를 실행하셔야 하는 분들은 [mingw](http://www.mingw.org/), [putty](https://www.chiark.greenend.org.uk/~sgtatham/putty/latest.html), windows 10 bash 등을 통해 bash shell을 사용하실 수 있습니다. 본 포스트의 내용은 로컬머신에서 bash shell을 사용할 수 있음을 전제하여 작성했습니다. 또한 vi를 사용할 수 있음을 전제하였으나, vi 사용이 어려우신 경우 nano에 대한 사용 방법을 검색하신 뒤 예제를 따라하시는 것을 추천드립니다. 그런 경우 아래에 표시한 vi 명령을 nano 명령으로 대신하시기 바랍니다. # 우분투 VPS 생성 --- 자신이 사용할 수 있는 클라우드 서비스 내 VPS를 Ubuntu 16.04 LTS 버전으로 생성합니다. 저는 개인적으로 제가 알고있는 한 가장 간단하고 저렴하게 VPS를 생성할 수 있는 [iwinv.kr 클라우드 서비스](//iwinv.kr)를 이용하여 VPS를 생성하도록 하겠습니다. 아래 예제에서는 Ubuntu 16.04 LTS(32bit) 버전으로 VPS를 생성하여 예제를 진행하게 됩니다. 편의상 root 계정으로 아래 예제를 수행하겠습니다. 방화벽 설정과 관련된 부분은 이 포스팅의 주제를 벗어나므로, 가능하다면 VPS 생성 시 방화벽은 사용하지 않음으로 설정하셔서 예제를 실습하시기를 희망합니다. # nginx 설치 및 설정 --- ssh 클라이언트를 이용하여 방금 막 생성한 VPS로 접속합니다. 접속 후 다음의 명령을 차례대로 실행하여 nginx를 서버에 설치한 뒤, 상태를 확인합니다. ```bash $ ssh root@your-vps-ip # 로그인 완료 후 아래 명령을 실행합니다. $ apt-get update $ apt-get install nginx ``` 설치 후 nginx 실행 상태를 다음과 같이 확인할 수 있습니다. ```bash $ service nginx status ``` ![nginx 설치 후 상태 확인](https://steemitimages.com/DQmT5UFQLESiCLNpXWp4EAyr2sTi5dZBphFoLYBzQ8v6CUd/20170807-nginx-status.png) 만약 현재 상태가 inactive라면, 다음의 명령을 통해 nginx 프로세스를 실행시킵니다. ```bash $ service nginx start ``` 설치가 완료된 후 브라우저를 통해 서버의 IP를 입력하여 페이지를 요청하면 welcome to nginx 페이지를 확인할 수 있습니다. 만약 welcome 페이지를 볼수 없다면 방화벽 설정 문제일 가능성이 있습니다. 방화벽과 관련된 부분은 클라우드 서비스 업체마다 설정하는 방법이 다를 수 있으니, 사용하시는 업체의 방화벽 설정 사용 설명을 통해 http 요청을 위한 80번 포트 및 https 요청을 위한 443 포트를 열어둘 수 있도록 합니다. 보유하고 있는 도메인을 현재 VPS로 연결시키기 전, 해당 도메인을 통해 본 서버로 http 요청을 해 오는 경우에 대해 처리할 수 있도록 다음과 같이 nginx 설정을 수행합니다. ```bash # 다음의 경로로 이동하여 ssltest.fureweb.com 도메인 요청에 대한 설정파일을 생성합니다. # 아래 경로에 등록된 conf 확장자를 가진 모든 파일이 nginx.conf파일에 의해 include 되며, # nginx가 실행될 때 본 디렉토리 내 파일들이 해석되게 됩니다. $ cd /etc/nginx/conf.d # 원하는 도메인 명으로 설정 파일을 하나 생성합니다. $ vi ssltest.fureweb.com.conf ``` 아래의 내용을 ssltest.fureweb.com.conf 파일에 입력합니다. ```bash server { listen 80; server_name ssltest.fureweb.com; } ``` 필요한 설정 파일을 생성하였다면, 다음의 명령을 통해 설정에 오타 등의 오류는 없는지 확인한 뒤 설정을 적용합니다. ```bash # 설정 파일들에 오류가 없는지 확인한 뒤 $ nginx -t nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful # 오류가 없다면 설정 파일 내용을 적용합니다. $ nginx -s reload ``` 현재 VPS는 ssltest.fureweb.com에 대한 http 요청을 처리할 수 있는 상태가 되었습니다. 이제 자신이 가지고 있는 도메인 관리업체의 웹사이트에 로그인하여 해당 도메인에 대한 http 요청이 새로 만든 VPS로 전달될 수 있도록 별도의 설정을 진행해 보겠습니다. # 도메인 Host IP 설정 및 확인 --- 본인이 보유하고있는 도메인을 관리하는 업체 사이트에 로그인하여, 자신이 보유한 도메인(또는 서브도메인)에 대한 Host IP를 설정합니다. 예시로, 제가 보유하고 있는 ssltest.fureweb.com 이라는 서브도메인에 대한 http 요청이 방금 만든 VPS 서버로 연결되도록 설정을 추가하겠습니다. 도메인 등록 대행업체마다 설정하는 방법은 다를 수 있으니, 아래 사진을 참고하셔서 비슷한 메뉴에서 설정을 처리해주세요. 일반적으로 DNS 관리 메뉴의 하위 메뉴에서 설정하실 수 있습니다. ![DNS 관리 메뉴 내 host ip 설정](https://fureweb-com.github.io/assets/img/posts/20170807-set-host-ip.png) 만약 이전에 해당 도메인으로의 연결을 한 적이 있다면, 로컬 PC의 DNS캐시를 삭제해야합니다. 없다면 무시하셔도 됩니다. ```bash # OSX 10.10.4 이상인 경우 $ killall -HUP mDNSResponder # Windows 10을 사용하는 경우 - powershell 또는 cmd에서 ipconfig /flushdns # 죄송하지만 이 외에는 검색해 주세요 -_-;; ``` 브라우저가 크롬이라면, 주소표시줄에 다음의 경로를 복사&붙여넣기하여 조회되는 화면에서 `Clear Host Cache` 버튼을 클릭하여 캐시를 삭제하세요. ```url chrome://net-internals/#dns ``` 모든 설정에 문제가 없다면, 이제 웹 브라우저를 통해 내가 가지고 있는 도메인에 대한 연결 요청이 방금 만든 VPS로 전달되게 됩니다. 단, 도메인 관리 업체마다 해당 적용값이 얼마나 빨리 반영되는지는 차이가 있을 수 있으므로, 충분한 시간을 두고 확인을 진행해 주세요. 통상 1~2분 내에는 적용되는 걸로 알고 있으나, 다른 업체는 어떤지 사용해보지 않아서 잘 모르겠네요. ^^; # Certbot 설치 및 설정 --- 먼저 certbot을 설치합니다. ```bash $ add-apt-repository ppa:certbot/certbot ``` <br> 해당 저장소에 담긴 패키지 정보를 확인할 수 있도록 다음과 같이 업데이트를 수행합니다. ```bash $ apt-get update ``` <br> `apt-get`을 이용하여 Certbot을 설치합니다. ```bash $ apt-get install python-certbot-nginx ``` <br> 설치된 certbot을 이용하여 ssltest.fureweb.com 도메인에 대한 SSL 인증서만 발급받도록 합니다. ```bash $ certbot certonly --nginx -d ssltest.fureweb.com # 위 명령을 실행하면 해당 도메인을 관리하는 사람의 이메일 주소를 입력하라고 나옵니다. 입력해 주세요. # 만료일에 대한 정보를 보내줍니다. # 약관에는 동의(A)하셔야 하며, # EFF 재단과의 이메일을 공유할지 여부를 묻는 부분에 대해서는 원하시는대로 진행하시면 됩니다. ``` <br> 아래와 같은 메시지들이 출력됩니다. ![Certbot 설정 과정](https://fureweb-com.github.io/assets/img/posts/20170807-certbot-process.png) 위 명령을 수행하고 나면, 아래 경로에 총 5개의 파일이 생성되어 있음을 확인할 수 있습니다. (실제로는 /etc/letsencrypt/archive/도메인명 디렉토리 내 파일에 대한 심볼릭 링크 입니다.) ```bash $ ls -al /etc/letsencrypt/live/ssltest.fureweb.com total 12 drwxr-xr-x 2 root root 4096 Aug 7 17:03 ./ drwx------ 4 root root 4096 Aug 7 16:56 ../ lrwxrwxrwx 1 root root 43 Aug 7 17:03 cert.pem -> ../../archive/ssltest.fureweb.com/cert1.pem lrwxrwxrwx 1 root root 44 Aug 7 17:03 chain.pem -> ../../archive/ssltest.fureweb.com/chain1.pem lrwxrwxrwx 1 root root 48 Aug 7 17:03 fullchain.pem -> ../../archive/ssltest.fureweb.com/fullchain1.pem lrwxrwxrwx 1 root root 46 Aug 7 17:03 privkey.pem -> ../../archive/ssltest.fureweb.com/privkey1.pem -rw-r--r-- 1 root root 543 Aug 7 17:03 README ``` <br> 이제 ssltest.fureweb.com 이라는 도메인에 대한 ssl 요청을 처리하기위해 필요한 인증서가 준비된 상태가 되었습니다. nginx가 이 인증서를 통해 https 요청을 처리할 수 있도록, 아까 설정했던 conf 파일을 아래와 같이 수정해 보겠습니다. ```bash # 아래 명령어로 기존 설정파일 편집 $ vi /etc/nginx/conf.d/ssltest.fureweb.com.conf # 다음과 같은 형태가 되어야합니다. server { # http://ssltest.fureweb.com 요청에 대해 # https://ssltest.fureweb.com 으로 리다이렉트 처리합니다. listen 80; server_name ssltest.fureweb.com; return 301 https://ssltest.fureweb.com; } server { # https://ssltest.fureweb.com 으로의 요청을 리스닝합니다. listen 443; server_name ssltest.fureweb.com; ssl on; ssl_certificate /etc/letsencrypt/live/ssltest.fureweb.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/ssltest.fureweb.com/privkey.pem; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_ciphers HIGH:!aNULL:!MD5; # 예제에서는 이 외에 별도 설정을 추가하지 않고, SSL 요청이 정상적으로 처리되는지만 확인합니다. # 일반적으로 아래에는 현재 도메인과 연결된 document_root 등에 대한 설정 기술하거나 # proxy 설정을 통해 동적 처리가 가능한 다른 WAS와 연동하여 응답을 핸들링합니다. } ``` <br> 위 설정을 저장한 뒤, conf 파일에 오타는 없는지 확인하고 문제가 없다면 설정 내용을 적용시킵니다. ```bash # 설정 파일들에 오류가 없는지 확인한 뒤 $ nginx -t nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful # 오류가 없다면 설정 파일 내용을 적용합니다. $ nginx -s reload ``` <br> # 최종 확인 --- 브라우저의 주소창에 https://ssltest.fureweb.com를 입력하여 연결이 제대로 이뤄지는지 확인합니다. 브라우저 캐시로 인해 https로 리다이렉트 처리가 되지 않은 페이지를 보여줄 수 있으니, 크롬 기준으로 강력 새로고침을 실행시켜주세요. 브라우저 주소표시줄 좌측에 자물쇠가 활성화 된 모습을 확인하실 수 있게 됩니다. ~~주소가 ssltest2.fureweb.com인건 무시해주세요... -_-;~~ ![SSL 적용 완료](https://fureweb-com.github.io/assets/img/posts/20170807-ssl-connection.png) # 마치며 --- 우분투 서버를 생성하는 것 부터 Nginx 설치 및 설정, 그리고 SSL 적용하기까지 모든 과정에 대해 확인해 보았습니다. 혹시라도 본 포스트를 보고 막히는 부분이 있거나 설명이 부족한 부분이 있다면 언제든지 댓글이나 질문 부탁 드리겠습니다. 읽어주셔서 감사합니다!
json metadata{"tags":["kr","kr-dev","ubuntu","letsencrypt","ssl"],"image":["https://steemitimages.com/DQmT5UFQLESiCLNpXWp4EAyr2sTi5dZBphFoLYBzQ8v6CUd/20170807-nginx-status.png","https://fureweb-com.github.io/assets/img/posts/20170807-set-host-ip.png","https://fureweb-com.github.io/assets/img/posts/20170807-certbot-process.png","https://fureweb-com.github.io/assets/img/posts/20170807-ssl-connection.png"],"links":["https://fureweb-com.github.io/blog/2017/08/07/applying-free-ssl-to-your-ubuntu-server-using-nginx-and-let'sencrypt-from-scratch.html","http://www.mingw.org/","https://www.chiark.greenend.org.uk/~sgtatham/putty/latest.html","//iwinv.kr","https://ssltest.fureweb.com"],"app":"steemit/0.1","format":"markdown"}
parent author
parent permlinkssl
permlinknginx-ssl
title우분투에서 nginx 설치부터 무료 SSL 적용까지
Transaction InfoBlock #20094811/Trx 1268f2778497ae0873098d49c72b8169819e5316
View Raw JSON Data
{
  "block": 20094811,
  "op": [
    "comment",
    {
      "author": "fureweb",
      "body": "# 들어가기 전에\n---\n1. 아직 아래 link들에 대해 새창 열기 기능이 steemit에서 지원되지 않는 것 같습니다. 혹시라도 아래에 등장하는 링크를 클릭하시려면 우클릭 후 새창에서 열어 확인해 주세요! \n2. 또한 syntax highlighting이 제대로 지원되지 않는 것 같아서, 혹시라도 보기 불편하신 점이 있다면 아래의 링크를 통해 원본 게시글을 확인하실 수도 있습니다.\n[https://fureweb-com.github.io/blog/2017/08/07/applying-free-ssl-to-your-ubuntu-server-using-nginx-and-let'sencrypt-from-scratch.html](https://fureweb-com.github.io/blog/2017/08/07/applying-free-ssl-to-your-ubuntu-server-using-nginx-and-let'sencrypt-from-scratch.html)\n\n# 개요\n---\n\n본 튜토리얼은 다음의 순서대로 진행됩니다.\n\n- 우분투 VPS 생성\n- nginx 설치 및 설정\n- 도메인 Host IP 설정 및 확인\n- Certbot 설치 및 설정\n- 최종 확인\n- 마치며\n\nwindows 환경에서 아래 예제를 실행하셔야 하는 분들은 [mingw](http://www.mingw.org/), [putty](https://www.chiark.greenend.org.uk/~sgtatham/putty/latest.html), windows 10 bash 등을 통해 bash shell을 사용하실 수 있습니다. 본 포스트의 내용은 로컬머신에서 bash shell을 사용할 수 있음을 전제하여 작성했습니다.  \n\n또한 vi를 사용할 수 있음을 전제하였으나, vi 사용이 어려우신 경우 nano에 대한 사용 방법을 검색하신 뒤 예제를 따라하시는 것을 추천드립니다. 그런 경우 아래에 표시한 vi 명령을 nano 명령으로 대신하시기 바랍니다.\n\n# 우분투 VPS 생성\n---\n\n자신이 사용할 수 있는 클라우드 서비스 내 VPS를 Ubuntu 16.04 LTS 버전으로 생성합니다. 저는 개인적으로 제가 알고있는 한 가장 간단하고 저렴하게 VPS를 생성할 수 있는 [iwinv.kr 클라우드 서비스](//iwinv.kr)를 이용하여 VPS를 생성하도록 하겠습니다.\n\n아래 예제에서는 Ubuntu 16.04 LTS(32bit) 버전으로 VPS를 생성하여 예제를 진행하게 됩니다. 편의상 root 계정으로 아래 예제를 수행하겠습니다.\n\n방화벽 설정과 관련된 부분은 이 포스팅의 주제를 벗어나므로, 가능하다면 VPS 생성 시 방화벽은 사용하지 않음으로 설정하셔서 예제를 실습하시기를 희망합니다.\n\n# nginx 설치 및 설정\n---\n\nssh 클라이언트를 이용하여 방금 막 생성한 VPS로 접속합니다. 접속 후 다음의 명령을 차례대로 실행하여 nginx를 서버에 설치한 뒤, 상태를 확인합니다.  \n\n```bash\n$ ssh root@your-vps-ip\n# 로그인 완료 후 아래 명령을 실행합니다.\n$ apt-get update\n$ apt-get install nginx\n```\n\n설치 후 nginx 실행 상태를 다음과 같이 확인할 수 있습니다.\n\n```bash\n$ service nginx status\n```\n  \n![nginx 설치 후 상태 확인](https://steemitimages.com/DQmT5UFQLESiCLNpXWp4EAyr2sTi5dZBphFoLYBzQ8v6CUd/20170807-nginx-status.png)\n  \n만약 현재 상태가 inactive라면, 다음의 명령을 통해 nginx 프로세스를 실행시킵니다.\n```bash\n$ service nginx start\n```\n  \n설치가 완료된 후 브라우저를 통해 서버의 IP를 입력하여 페이지를 요청하면 welcome to nginx 페이지를 확인할 수 있습니다. 만약 welcome 페이지를 볼수 없다면 방화벽 설정 문제일 가능성이 있습니다. 방화벽과 관련된 부분은 클라우드 서비스 업체마다 설정하는 방법이 다를 수 있으니, 사용하시는 업체의 방화벽 설정 사용 설명을 통해 http 요청을 위한 80번 포트 및 https 요청을 위한 443 포트를 열어둘 수 있도록 합니다.\n\n보유하고 있는 도메인을 현재 VPS로 연결시키기 전, 해당 도메인을 통해 본 서버로 http 요청을 해 오는 경우에 대해 처리할 수 있도록 다음과 같이 nginx 설정을 수행합니다.\n\n```bash\n# 다음의 경로로 이동하여 ssltest.fureweb.com 도메인 요청에 대한 설정파일을 생성합니다.\n# 아래 경로에 등록된 conf 확장자를 가진 모든 파일이 nginx.conf파일에 의해 include 되며, \n# nginx가 실행될 때 본 디렉토리 내 파일들이 해석되게 됩니다.\n$ cd /etc/nginx/conf.d\n\n# 원하는 도메인 명으로 설정 파일을 하나 생성합니다.\n$ vi ssltest.fureweb.com.conf\n```\n  \n아래의 내용을 ssltest.fureweb.com.conf 파일에 입력합니다.\n```bash\nserver {\n  listen 80;\n  server_name ssltest.fureweb.com;\n}\n```\n\n필요한 설정 파일을 생성하였다면, 다음의 명령을 통해 설정에 오타 등의 오류는 없는지 확인한 뒤 설정을 적용합니다.\n```bash\n# 설정 파일들에 오류가 없는지 확인한 뒤\n$ nginx -t\nnginx: the configuration file /etc/nginx/nginx.conf syntax is ok\nnginx: configuration file /etc/nginx/nginx.conf test is successful\n# 오류가 없다면 설정 파일 내용을 적용합니다.\n$ nginx -s reload\n```\n\n현재 VPS는 ssltest.fureweb.com에 대한 http 요청을 처리할 수 있는 상태가 되었습니다. 이제 자신이 가지고 있는 도메인 관리업체의 웹사이트에 로그인하여 해당 도메인에 대한 http 요청이 새로 만든 VPS로 전달될 수 있도록 별도의 설정을 진행해 보겠습니다.\n\n\n# 도메인 Host IP 설정 및 확인\n---\n\n본인이 보유하고있는 도메인을 관리하는 업체 사이트에 로그인하여, 자신이 보유한 도메인(또는 서브도메인)에 대한 Host IP를 설정합니다. \n\n예시로, 제가 보유하고 있는 ssltest.fureweb.com 이라는 서브도메인에 대한 http 요청이 방금 만든 VPS 서버로 연결되도록 설정을 추가하겠습니다. 도메인 등록 대행업체마다 설정하는 방법은 다를 수 있으니, 아래 사진을 참고하셔서 비슷한 메뉴에서 설정을 처리해주세요. 일반적으로 DNS 관리 메뉴의 하위 메뉴에서 설정하실 수 있습니다.\n\n![DNS 관리 메뉴 내 host ip 설정](https://fureweb-com.github.io/assets/img/posts/20170807-set-host-ip.png)\n\n만약 이전에 해당 도메인으로의 연결을 한 적이 있다면, 로컬 PC의 DNS캐시를 삭제해야합니다. 없다면 무시하셔도 됩니다.\n```bash\n# OSX 10.10.4 이상인 경우\n$ killall -HUP mDNSResponder\n\n# Windows 10을 사용하는 경우 - powershell 또는 cmd에서\nipconfig /flushdns\n\n# 죄송하지만 이 외에는 검색해 주세요 -_-;;\n```\n\n브라우저가 크롬이라면, 주소표시줄에 다음의 경로를 복사&붙여넣기하여 조회되는 화면에서 `Clear Host Cache` 버튼을 클릭하여 캐시를 삭제하세요.  \n```url\nchrome://net-internals/#dns\n```\n\n모든 설정에 문제가 없다면, 이제 웹 브라우저를 통해 내가 가지고 있는 도메인에 대한 연결 요청이 방금 만든 VPS로 전달되게 됩니다. 단, 도메인 관리 업체마다 해당 적용값이 얼마나 빨리 반영되는지는 차이가 있을 수 있으므로, 충분한 시간을 두고 확인을 진행해 주세요. 통상 1~2분 내에는 적용되는 걸로 알고 있으나, 다른 업체는 어떤지 사용해보지 않아서 잘 모르겠네요. ^^;\n\n# Certbot 설치 및 설정\n---\n\n먼저 certbot을 설치합니다.\n```bash\n$ add-apt-repository ppa:certbot/certbot\n```\n<br>\n해당 저장소에 담긴 패키지 정보를 확인할 수 있도록 다음과 같이 업데이트를 수행합니다.\n```bash\n$ apt-get update\n```\n<br>\n`apt-get`을 이용하여 Certbot을 설치합니다.\n```bash\n$ apt-get install python-certbot-nginx\n```\n<br>\n설치된 certbot을 이용하여 ssltest.fureweb.com 도메인에 대한 SSL 인증서만 발급받도록 합니다.\n\n```bash\n$ certbot certonly --nginx -d ssltest.fureweb.com\n# 위 명령을 실행하면 해당 도메인을 관리하는 사람의 이메일 주소를 입력하라고 나옵니다. 입력해 주세요.\n# 만료일에 대한 정보를 보내줍니다.\n# 약관에는 동의(A)하셔야 하며,\n# EFF 재단과의 이메일을 공유할지 여부를 묻는 부분에 대해서는 원하시는대로 진행하시면 됩니다.\n```\n<br>\n아래와 같은 메시지들이 출력됩니다.\n![Certbot 설정 과정](https://fureweb-com.github.io/assets/img/posts/20170807-certbot-process.png)\n\n위 명령을 수행하고 나면, 아래 경로에 총 5개의 파일이 생성되어 있음을 확인할 수 있습니다. (실제로는 /etc/letsencrypt/archive/도메인명 디렉토리 내 파일에 대한 심볼릭 링크 입니다.)\n```bash\n$ ls -al /etc/letsencrypt/live/ssltest.fureweb.com\ntotal 12\ndrwxr-xr-x 2 root root 4096 Aug  7 17:03 ./\ndrwx------ 4 root root 4096 Aug  7 16:56 ../\nlrwxrwxrwx 1 root root   43 Aug  7 17:03 cert.pem -> ../../archive/ssltest.fureweb.com/cert1.pem\nlrwxrwxrwx 1 root root   44 Aug  7 17:03 chain.pem -> ../../archive/ssltest.fureweb.com/chain1.pem\nlrwxrwxrwx 1 root root   48 Aug  7 17:03 fullchain.pem -> ../../archive/ssltest.fureweb.com/fullchain1.pem\nlrwxrwxrwx 1 root root   46 Aug  7 17:03 privkey.pem -> ../../archive/ssltest.fureweb.com/privkey1.pem\n-rw-r--r-- 1 root root  543 Aug  7 17:03 README\n```\n<br>\n이제 ssltest.fureweb.com 이라는 도메인에 대한 ssl 요청을 처리하기위해 필요한 인증서가 준비된 상태가 되었습니다. nginx가 이 인증서를 통해 https 요청을 처리할 수 있도록, 아까 설정했던 conf 파일을 아래와 같이 수정해 보겠습니다.  \n\n```bash\n# 아래 명령어로 기존 설정파일 편집\n$ vi /etc/nginx/conf.d/ssltest.fureweb.com.conf\n\n# 다음과 같은 형태가 되어야합니다.\nserver {\n    # http://ssltest.fureweb.com 요청에 대해\n    # https://ssltest.fureweb.com 으로 리다이렉트 처리합니다. \n    listen 80;\n    server_name ssltest.fureweb.com;\n    return 301 https://ssltest.fureweb.com;\n}\n\nserver {\n    # https://ssltest.fureweb.com 으로의 요청을 리스닝합니다.\n    listen 443;\n    server_name ssltest.fureweb.com;\n\n    ssl on;\n    ssl_certificate /etc/letsencrypt/live/ssltest.fureweb.com/fullchain.pem;\n    ssl_certificate_key /etc/letsencrypt/live/ssltest.fureweb.com/privkey.pem;\n\n    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;\n    ssl_ciphers HIGH:!aNULL:!MD5;\n\n    # 예제에서는 이 외에 별도 설정을 추가하지 않고, SSL 요청이 정상적으로 처리되는지만 확인합니다.\n    # 일반적으로 아래에는 현재 도메인과 연결된 document_root 등에 대한 설정 기술하거나\n    # proxy 설정을 통해 동적 처리가 가능한 다른 WAS와 연동하여 응답을 핸들링합니다.\n}\n\n```\n<br>\n위 설정을 저장한 뒤, conf 파일에 오타는 없는지 확인하고 문제가 없다면 설정 내용을 적용시킵니다.\n\n```bash\n# 설정 파일들에 오류가 없는지 확인한 뒤\n$ nginx -t\nnginx: the configuration file /etc/nginx/nginx.conf syntax is ok\nnginx: configuration file /etc/nginx/nginx.conf test is successful\n# 오류가 없다면 설정 파일 내용을 적용합니다.\n$ nginx -s reload\n```\n<br>\n\n# 최종 확인\n---\n\n브라우저의 주소창에 https://ssltest.fureweb.com를 입력하여 연결이 제대로 이뤄지는지 확인합니다. 브라우저 캐시로 인해 https로 리다이렉트 처리가 되지 않은 페이지를 보여줄 수 있으니, 크롬 기준으로 강력 새로고침을 실행시켜주세요.\n\n브라우저 주소표시줄 좌측에 자물쇠가 활성화 된 모습을 확인하실 수 있게 됩니다.  \n~~주소가 ssltest2.fureweb.com인건 무시해주세요... -_-;~~\n\n![SSL 적용 완료](https://fureweb-com.github.io/assets/img/posts/20170807-ssl-connection.png)\n\n\n# 마치며\n---\n\n우분투 서버를 생성하는 것 부터 Nginx 설치 및 설정, 그리고 SSL 적용하기까지 모든 과정에 대해 확인해 보았습니다. 혹시라도 본 포스트를 보고 막히는 부분이 있거나 설명이 부족한 부분이 있다면 언제든지 댓글이나 질문 부탁 드리겠습니다.  \n\n읽어주셔서 감사합니다!",
      "json_metadata": "{\"tags\":[\"kr\",\"kr-dev\",\"ubuntu\",\"letsencrypt\",\"ssl\"],\"image\":[\"https://steemitimages.com/DQmT5UFQLESiCLNpXWp4EAyr2sTi5dZBphFoLYBzQ8v6CUd/20170807-nginx-status.png\",\"https://fureweb-com.github.io/assets/img/posts/20170807-set-host-ip.png\",\"https://fureweb-com.github.io/assets/img/posts/20170807-certbot-process.png\",\"https://fureweb-com.github.io/assets/img/posts/20170807-ssl-connection.png\"],\"links\":[\"https://fureweb-com.github.io/blog/2017/08/07/applying-free-ssl-to-your-ubuntu-server-using-nginx-and-let'sencrypt-from-scratch.html\",\"http://www.mingw.org/\",\"https://www.chiark.greenend.org.uk/~sgtatham/putty/latest.html\",\"//iwinv.kr\",\"https://ssltest.fureweb.com\"],\"app\":\"steemit/0.1\",\"format\":\"markdown\"}",
      "parent_author": "",
      "parent_permlink": "ssl",
      "permlink": "nginx-ssl",
      "title": "우분투에서 nginx 설치부터 무료 SSL 적용까지"
    }
  ],
  "op_in_trx": 0,
  "timestamp": "2018-02-22T14:19:09",
  "trx_id": "1268f2778497ae0873098d49c72b8169819e5316",
  "trx_in_block": 5,
  "virtual_op": 0
}
furewebpublished a new post: nginx-ssl
2018/02/22 14:16:48
authorfureweb
body# 들어가기 전에 --- 1. 아직 아래 link들에 대해 새창 열기 기능이 steemit에서 지원되지 않는 것 같습니다. 혹시라도 아래에 등장하는 링크를 클릭하시려면 우클릭 후 새창에서 열어 확인해 주세요! 2. 또한 syntax highlighting이 제대로 지원되지 않는 것 같아서, 혹시라도 보기 불편하신 점이 있다면 아래의 링크를 통해 원본 게시글을 확인하실 수도 있습니다. [https://fureweb-com.github.io/blog/2017/08/07/applying-free-ssl-to-your-ubuntu-server-using-nginx-and-let'sencrypt-from-scratch.html](https://fureweb-com.github.io/blog/2017/08/07/applying-free-ssl-to-your-ubuntu-server-using-nginx-and-let'sencrypt-from-scratch.html) # 개요 --- 본 튜토리얼은 다음의 순서대로 진행됩니다. - 우분투 VPS 생성 - nginx 설치 및 설정 - 도메인 Host IP 설정 및 확인 - Certbot 설치 및 설정 - 최종 확인 - 마치며 windows 환경에서 아래 예제를 실행하셔야 하는 분들은 [mingw](http://www.mingw.org/), [putty](https://www.chiark.greenend.org.uk/~sgtatham/putty/latest.html), windows 10 bash 등을 통해 bash shell을 사용하실 수 있습니다. 본 포스트의 내용은 로컬머신에서 bash shell을 사용할 수 있음을 전제하여 작성했습니다. 또한 vi를 사용할 수 있음을 전제하였으나, vi 사용이 어려우신 경우 nano에 대한 사용 방법을 검색하신 뒤 예제를 따라하시는 것을 추천드립니다. 그런 경우 아래에 표시한 vi 명령을 nano 명령으로 대신하시기 바랍니다. # 우분투 VPS 생성 --- 자신이 사용할 수 있는 클라우드 서비스 내 VPS를 Ubuntu 16.04 LTS 버전으로 생성합니다. 저는 개인적으로 제가 알고있는 한 가장 간단하고 저렴하게 VPS를 생성할 수 있는 [iwinv.kr 클라우드 서비스](//iwinv.kr)를 이용하여 VPS를 생성하도록 하겠습니다. 아래 예제에서는 Ubuntu 16.04 LTS(32bit) 버전으로 VPS를 생성하여 예제를 진행하게 됩니다. 편의상 root 계정으로 아래 예제를 수행하겠습니다. 방화벽 설정과 관련된 부분은 이 포스팅의 주제를 벗어나므로, 가능하다면 VPS 생성 시 방화벽은 사용하지 않음으로 설정하셔서 예제를 실습하시기를 희망합니다. # nginx 설치 및 설정 --- ssh 클라이언트를 이용하여 방금 막 생성한 VPS로 접속합니다. 접속 후 다음의 명령을 차례대로 실행하여 nginx를 서버에 설치한 뒤, 상태를 확인합니다. ```bash $ ssh root@your-vps-ip # 로그인 완료 후 아래 명령을 실행합니다. $ apt-get update $ apt-get install nginx ``` 설치 후 nginx 실행 상태를 다음과 같이 확인할 수 있습니다. ```bash $ service nginx status ``` ![nginx 설치 후 상태 확인](https://steemitimages.com/DQmT5UFQLESiCLNpXWp4EAyr2sTi5dZBphFoLYBzQ8v6CUd/20170807-nginx-status.png) 만약 현재 상태가 inactive라면, 다음의 명령을 통해 nginx 프로세스를 실행시킵니다. ```bash $ service nginx start ``` 설치가 완료된 후 브라우저를 통해 서버의 IP를 입력하여 페이지를 요청하면 welcome to nginx 페이지를 확인할 수 있습니다. 만약 welcome 페이지를 볼수 없다면 방화벽 설정 문제일 가능성이 있습니다. 방화벽과 관련된 부분은 클라우드 서비스 업체마다 설정하는 방법이 다를 수 있으니, 사용하시는 업체의 방화벽 설정 사용 설명을 통해 http 요청을 위한 80번 포트 및 https 요청을 위한 443 포트를 열어둘 수 있도록 합니다. 보유하고 있는 도메인을 현재 VPS로 연결시키기 전, 해당 도메인을 통해 본 서버로 http 요청을 해 오는 경우에 대해 처리할 수 있도록 다음과 같이 nginx 설정을 수행합니다. ```bash # 다음의 경로로 이동하여 ssltest.fureweb.com 도메인 요청에 대한 설정파일을 생성합니다. # 아래 경로에 등록된 conf 확장자를 가진 모든 파일이 nginx.conf파일에 의해 include 되며, # nginx가 실행될 때 본 디렉토리 내 파일들이 해석되게 됩니다. $ cd /etc/nginx/conf.d # 원하는 도메인 명으로 설정 파일을 하나 생성합니다. $ vi ssltest.fureweb.com.conf ``` 아래의 내용을 ssltest.fureweb.com.conf 파일에 입력합니다. ```bash server { listen 80; server_name ssltest.fureweb.com; } ``` 필요한 설정 파일을 생성하였다면, 다음의 명령을 통해 설정에 오타 등의 오류는 없는지 확인한 뒤 설정을 적용합니다. ```bash # 설정 파일들에 오류가 없는지 확인한 뒤 $ nginx -t nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful # 오류가 없다면 설정 파일 내용을 적용합니다. $ nginx -s reload ``` 현재 VPS는 ssltest.fureweb.com에 대한 http 요청을 처리할 수 있는 상태가 되었습니다. 이제 자신이 가지고 있는 도메인 관리업체의 웹사이트에 로그인하여 해당 도메인에 대한 http 요청이 새로 만든 VPS로 전달될 수 있도록 별도의 설정을 진행해 보겠습니다. # 도메인 Host IP 설정 및 확인 --- 본인이 보유하고있는 도메인을 관리하는 업체 사이트에 로그인하여, 자신이 보유한 도메인(또는 서브도메인)에 대한 Host IP를 설정합니다. 예시로, 제가 보유하고 있는 ssltest.fureweb.com 이라는 서브도메인에 대한 http 요청이 방금 만든 VPS 서버로 연결되도록 설정을 추가하겠습니다. 도메인 등록 대행업체마다 설정하는 방법은 다를 수 있으니, 아래 사진을 참고하셔서 비슷한 메뉴에서 설정을 처리해주세요. 일반적으로 DNS 관리 메뉴의 하위 메뉴에서 설정하실 수 있습니다. ![DNS 관리 메뉴 내 host ip 설정](https://fureweb-com.github.io/assets/img/posts/20170807-set-host-ip.png) 만약 이전에 해당 도메인으로의 연결을 한 적이 있다면, 로컬 PC의 DNS캐시를 삭제해야합니다. 없다면 무시하셔도 됩니다. ```bash # OSX 10.10.4 이상인 경우 $ killall -HUP mDNSResponder # Windows 10을 사용하는 경우 - powershell 또는 cmd에서 ipconfig /flushdns # 죄송하지만 이 외에는 검색해 주세요 -_-;; ``` 브라우저가 크롬이라면, 주소표시줄에 다음의 경로를 복사&붙여넣기하여 조회되는 화면에서 `Clear Host Cache` 버튼을 클릭하여 캐시를 삭제하세요. ```url chrome://net-internals/#dns ``` 모든 설정에 문제가 없다면, 이제 웹 브라우저를 통해 내가 가지고 있는 도메인에 대한 연결 요청이 방금 만든 VPS로 전달되게 됩니다. 단, 도메인 관리 업체마다 해당 적용값이 얼마나 빨리 반영되는지는 차이가 있을 수 있으므로, 충분한 시간을 두고 확인을 진행해 주세요. 통상 1~2분 내에는 적용되는 걸로 알고 있으나, 다른 업체는 어떤지 사용해보지 않아서 잘 모르겠네요. ^^; # Certbot 설치 및 설정 --- 먼저 certbot을 설치합니다. ```bash $ add-apt-repository ppa:certbot/certbot ``` <br> 해당 저장소에 담긴 패키지 정보를 확인할 수 있도록 다음과 같이 업데이트를 수행합니다. ```bash $ apt-get update ``` <br> `apt-get`을 이용하여 Certbot을 설치합니다. ```bash $ apt-get install python-certbot-nginx ``` <br> 설치된 certbot을 이용하여 ssltest.fureweb.com 도메인에 대한 SSL 인증서만 발급받도록 합니다. ```bash $ certbot certonly --nginx -d ssltest.fureweb.com # 위 명령을 실행하면 해당 도메인을 관리하는 사람의 이메일 주소를 입력하라고 나옵니다. 입력해 주세요. # 만료일에 대한 정보를 보내줍니다. # 약관에는 동의(A)하셔야 하며, # EFF 재단과의 이메일을 공유할지 여부를 묻는 부분에 대해서는 원하시는대로 진행하시면 됩니다. ``` <br> 아래와 같은 메시지들이 출력됩니다. ![Certbot 설정 과정](https://fureweb-com.github.io/assets/img/posts/20170807-certbot-process.png) 위 명령을 수행하고 나면, 아래 경로에 총 5개의 파일이 생성되어 있음을 확인할 수 있습니다. (실제로는 /etc/letsencrypt/archive/도메인명 디렉토리 내 파일에 대한 심볼릭 링크 입니다.) ```bash $ ls -al /etc/letsencrypt/live/ssltest.fureweb.com total 12 drwxr-xr-x 2 root root 4096 Aug 7 17:03 ./ drwx------ 4 root root 4096 Aug 7 16:56 ../ lrwxrwxrwx 1 root root 43 Aug 7 17:03 cert.pem -> ../../archive/ssltest.fureweb.com/cert1.pem lrwxrwxrwx 1 root root 44 Aug 7 17:03 chain.pem -> ../../archive/ssltest.fureweb.com/chain1.pem lrwxrwxrwx 1 root root 48 Aug 7 17:03 fullchain.pem -> ../../archive/ssltest.fureweb.com/fullchain1.pem lrwxrwxrwx 1 root root 46 Aug 7 17:03 privkey.pem -> ../../archive/ssltest.fureweb.com/privkey1.pem -rw-r--r-- 1 root root 543 Aug 7 17:03 README ``` <br> 이제 ssltest.fureweb.com 이라는 도메인에 대한 ssl 요청을 처리하기위해 필요한 인증서가 준비된 상태가 되었습니다. nginx가 이 인증서를 통해 https 요청을 처리할 수 있도록, 아까 설정했던 conf 파일을 아래와 같이 수정해 보겠습니다. ```bash # 아래 명령어로 기존 설정파일 편집 $ vi /etc/nginx/conf.d/ssltest.fureweb.com.conf # 다음과 같은 형태가 되어야합니다. server { # http://ssltest.fureweb.com 요청에 대해 # https://ssltest.fureweb.com 으로 리다이렉트 처리합니다. listen 80; server_name ssltest.fureweb.com; return 301 https://ssltest.fureweb.com; } server { # https://ssltest.fureweb.com 으로의 요청을 리스닝합니다. listen 443; server_name ssltest.fureweb.com; ssl on; ssl_certificate /etc/letsencrypt/live/ssltest.fureweb.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/ssltest.fureweb.com/privkey.pem; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_ciphers HIGH:!aNULL:!MD5; # 예제에서는 이 외에 별도 설정을 추가하지 않고, SSL 요청이 정상적으로 처리되는지만 확인합니다. # 일반적으로 아래에는 현재 도메인과 연결된 document_root 등에 대한 설정 기술하거나 # proxy 설정을 통해 동적 처리가 가능한 다른 WAS와 연동하여 응답을 핸들링합니다. } ``` <br> 위 설정을 저장한 뒤, conf 파일에 오타는 없는지 확인하고 문제가 없다면 설정 내용을 적용시킵니다. ```bash # 설정 파일들에 오류가 없는지 확인한 뒤 $ nginx -t nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful # 오류가 없다면 설정 파일 내용을 적용합니다. $ nginx -s reload ``` <br> # 최종 확인 --- 브라우저의 주소창에 https://ssltest.fureweb.com를 입력하여 연결이 제대로 이뤄지는지 확인합니다. 브라우저 캐시로 인해 https로 리다이렉트 처리가 되지 않은 페이지를 보여줄 수 있으니, 크롬 기준으로 강력 새로고침을 실행시켜주세요. 브라우저 주소표시줄 좌측에 자물쇠가 활성화 된 모습을 확인하실 수 있게 됩니다. ~~주소가 ssltest2.fureweb.com인건 무시해주세요... -_-;~~ ![SSL 적용 완료](https://fureweb-com.github.io/assets/img/posts/20170807-ssl-connection.png) # 마치며 --- 우분투 서버를 생성하는 것 부터 Nginx 설치 및 설정, 그리고 SSL 적용하기까지 모든 과정에 대해 확인해 보았습니다. 혹시라도 본 포스트를 보고 막히는 부분이 있거나 설명이 부족한 부분이 있다면 언제든지 댓글이나 질문 부탁 드리겠습니다. 읽어주셔서 감사합니다!
json metadata{"tags":["kr","kr-dev","ubuntu","letsencrypt","ssl"],"image":["https://steemitimages.com/DQmT5UFQLESiCLNpXWp4EAyr2sTi5dZBphFoLYBzQ8v6CUd/20170807-nginx-status.png","https://fureweb-com.github.io/assets/img/posts/20170807-set-host-ip.png","https://fureweb-com.github.io/assets/img/posts/20170807-certbot-process.png","https://fureweb-com.github.io/assets/img/posts/20170807-ssl-connection.png"],"links":["https://fureweb-com.github.io/blog/2017/08/07/applying-free-ssl-to-your-ubuntu-server-using-nginx-and-let'sencrypt-from-scratch.html","http://www.mingw.org/","https://www.chiark.greenend.org.uk/~sgtatham/putty/latest.html","//iwinv.kr","https://ssltest.fureweb.com"],"app":"steemit/0.1","format":"markdown"}
parent author
parent permlinkssl
permlinknginx-ssl
title우분투에서 nginx 설치부터 무료 SSL 적용까지
Transaction InfoBlock #20094764/Trx d65ba110ce0c808b59a2c90e055a9233c3a2c577
View Raw JSON Data
{
  "block": 20094764,
  "op": [
    "comment",
    {
      "author": "fureweb",
      "body": "# 들어가기 전에\n---\n1. 아직 아래 link들에 대해 새창 열기 기능이 steemit에서 지원되지 않는 것 같습니다. 혹시라도 아래에 등장하는 링크를 클릭하시려면 우클릭 후 새창에서 열어 확인해 주세요! \n2. 또한 syntax highlighting이 제대로 지원되지 않는 것 같아서, 혹시라도 보기 불편하신 점이 있다면 아래의 링크를 통해 원본 게시글을 확인하실 수도 있습니다.\n[https://fureweb-com.github.io/blog/2017/08/07/applying-free-ssl-to-your-ubuntu-server-using-nginx-and-let'sencrypt-from-scratch.html](https://fureweb-com.github.io/blog/2017/08/07/applying-free-ssl-to-your-ubuntu-server-using-nginx-and-let'sencrypt-from-scratch.html)\n\n# 개요\n---\n\n본 튜토리얼은 다음의 순서대로 진행됩니다.\n\n- 우분투 VPS 생성\n- nginx 설치 및 설정\n- 도메인 Host IP 설정 및 확인\n- Certbot 설치 및 설정\n- 최종 확인\n- 마치며\n\nwindows 환경에서 아래 예제를 실행하셔야 하는 분들은 [mingw](http://www.mingw.org/), [putty](https://www.chiark.greenend.org.uk/~sgtatham/putty/latest.html), windows 10 bash 등을 통해 bash shell을 사용하실 수 있습니다. 본 포스트의 내용은 로컬머신에서 bash shell을 사용할 수 있음을 전제하여 작성했습니다.  \n\n또한 vi를 사용할 수 있음을 전제하였으나, vi 사용이 어려우신 경우 nano에 대한 사용 방법을 검색하신 뒤 예제를 따라하시는 것을 추천드립니다. 그런 경우 아래에 표시한 vi 명령을 nano 명령으로 대신하시기 바랍니다.\n\n# 우분투 VPS 생성\n---\n\n자신이 사용할 수 있는 클라우드 서비스 내 VPS를 Ubuntu 16.04 LTS 버전으로 생성합니다. 저는 개인적으로 제가 알고있는 한 가장 간단하고 저렴하게 VPS를 생성할 수 있는 [iwinv.kr 클라우드 서비스](//iwinv.kr)를 이용하여 VPS를 생성하도록 하겠습니다.\n\n아래 예제에서는 Ubuntu 16.04 LTS(32bit) 버전으로 VPS를 생성하여 예제를 진행하게 됩니다. 편의상 root 계정으로 아래 예제를 수행하겠습니다.\n\n방화벽 설정과 관련된 부분은 이 포스팅의 주제를 벗어나므로, 가능하다면 VPS 생성 시 방화벽은 사용하지 않음으로 설정하셔서 예제를 실습하시기를 희망합니다.\n\n# nginx 설치 및 설정\n---\n\nssh 클라이언트를 이용하여 방금 막 생성한 VPS로 접속합니다. 접속 후 다음의 명령을 차례대로 실행하여 nginx를 서버에 설치한 뒤, 상태를 확인합니다.  \n\n```bash\n$ ssh root@your-vps-ip\n# 로그인 완료 후 아래 명령을 실행합니다.\n$ apt-get update\n$ apt-get install nginx\n```\n\n설치 후 nginx 실행 상태를 다음과 같이 확인할 수 있습니다.\n\n```bash\n$ service nginx status\n```\n  \n![nginx 설치 후 상태 확인](https://steemitimages.com/DQmT5UFQLESiCLNpXWp4EAyr2sTi5dZBphFoLYBzQ8v6CUd/20170807-nginx-status.png)\n  \n만약 현재 상태가 inactive라면, 다음의 명령을 통해 nginx 프로세스를 실행시킵니다.\n```bash\n$ service nginx start\n```\n  \n설치가 완료된 후 브라우저를 통해 서버의 IP를 입력하여 페이지를 요청하면 welcome to nginx 페이지를 확인할 수 있습니다. 만약 welcome 페이지를 볼수 없다면 방화벽 설정 문제일 가능성이 있습니다. 방화벽과 관련된 부분은 클라우드 서비스 업체마다 설정하는 방법이 다를 수 있으니, 사용하시는 업체의 방화벽 설정 사용 설명을 통해 http 요청을 위한 80번 포트 및 https 요청을 위한 443 포트를 열어둘 수 있도록 합니다.\n\n보유하고 있는 도메인을 현재 VPS로 연결시키기 전, 해당 도메인을 통해 본 서버로 http 요청을 해 오는 경우에 대해 처리할 수 있도록 다음과 같이 nginx 설정을 수행합니다.\n\n```bash\n# 다음의 경로로 이동하여 ssltest.fureweb.com 도메인 요청에 대한 설정파일을 생성합니다.\n# 아래 경로에 등록된 conf 확장자를 가진 모든 파일이 nginx.conf파일에 의해 include 되며, \n# nginx가 실행될 때 본 디렉토리 내 파일들이 해석되게 됩니다.\n$ cd /etc/nginx/conf.d\n\n# 원하는 도메인 명으로 설정 파일을 하나 생성합니다.\n$ vi ssltest.fureweb.com.conf\n```\n  \n아래의 내용을 ssltest.fureweb.com.conf 파일에 입력합니다.\n```bash\nserver {\n  listen 80;\n  server_name ssltest.fureweb.com;\n}\n```\n\n필요한 설정 파일을 생성하였다면, 다음의 명령을 통해 설정에 오타 등의 오류는 없는지 확인한 뒤 설정을 적용합니다.\n```bash\n# 설정 파일들에 오류가 없는지 확인한 뒤\n$ nginx -t\nnginx: the configuration file /etc/nginx/nginx.conf syntax is ok\nnginx: configuration file /etc/nginx/nginx.conf test is successful\n# 오류가 없다면 설정 파일 내용을 적용합니다.\n$ nginx -s reload\n```\n\n현재 VPS는 ssltest.fureweb.com에 대한 http 요청을 처리할 수 있는 상태가 되었습니다. 이제 자신이 가지고 있는 도메인 관리업체의 웹사이트에 로그인하여 해당 도메인에 대한 http 요청이 새로 만든 VPS로 전달될 수 있도록 별도의 설정을 진행해 보겠습니다.\n\n\n# 도메인 Host IP 설정 및 확인\n---\n\n본인이 보유하고있는 도메인을 관리하는 업체 사이트에 로그인하여, 자신이 보유한 도메인(또는 서브도메인)에 대한 Host IP를 설정합니다. \n\n예시로, 제가 보유하고 있는 ssltest.fureweb.com 이라는 서브도메인에 대한 http 요청이 방금 만든 VPS 서버로 연결되도록 설정을 추가하겠습니다. 도메인 등록 대행업체마다 설정하는 방법은 다를 수 있으니, 아래 사진을 참고하셔서 비슷한 메뉴에서 설정을 처리해주세요. 일반적으로 DNS 관리 메뉴의 하위 메뉴에서 설정하실 수 있습니다.\n\n![DNS 관리 메뉴 내 host ip 설정](https://fureweb-com.github.io/assets/img/posts/20170807-set-host-ip.png)\n\n만약 이전에 해당 도메인으로의 연결을 한 적이 있다면, 로컬 PC의 DNS캐시를 삭제해야합니다. 없다면 무시하셔도 됩니다.\n```bash\n# OSX 10.10.4 이상인 경우\n$ killall -HUP mDNSResponder\n\n# Windows 10을 사용하는 경우 - powershell 또는 cmd에서\nipconfig /flushdns\n\n# 죄송하지만 이 외에는 검색해 주세요 -_-;;\n```\n\n브라우저가 크롬이라면, 주소표시줄에 다음의 경로를 복사&붙여넣기하여 조회되는 화면에서 `Clear Host Cache` 버튼을 클릭하여 캐시를 삭제하세요.  \n```url\nchrome://net-internals/#dns\n```\n\n모든 설정에 문제가 없다면, 이제 웹 브라우저를 통해 내가 가지고 있는 도메인에 대한 연결 요청이 방금 만든 VPS로 전달되게 됩니다. 단, 도메인 관리 업체마다 해당 적용값이 얼마나 빨리 반영되는지는 차이가 있을 수 있으므로, 충분한 시간을 두고 확인을 진행해 주세요. 통상 1~2분 내에는 적용되는 걸로 알고 있으나, 다른 업체는 어떤지 사용해보지 않아서 잘 모르겠네요. ^^;\n\n# Certbot 설치 및 설정\n---\n\n먼저 certbot을 설치합니다.\n```bash\n$ add-apt-repository ppa:certbot/certbot\n```\n<br>\n해당 저장소에 담긴 패키지 정보를 확인할 수 있도록 다음과 같이 업데이트를 수행합니다.\n```bash\n$ apt-get update\n```\n<br>\n`apt-get`을 이용하여 Certbot을 설치합니다.\n```bash\n$ apt-get install python-certbot-nginx\n```\n<br>\n설치된 certbot을 이용하여 ssltest.fureweb.com 도메인에 대한 SSL 인증서만 발급받도록 합니다.\n\n```bash\n$ certbot certonly --nginx -d ssltest.fureweb.com\n# 위 명령을 실행하면 해당 도메인을 관리하는 사람의 이메일 주소를 입력하라고 나옵니다. 입력해 주세요.\n# 만료일에 대한 정보를 보내줍니다.\n# 약관에는 동의(A)하셔야 하며,\n# EFF 재단과의 이메일을 공유할지 여부를 묻는 부분에 대해서는 원하시는대로 진행하시면 됩니다.\n```\n<br>\n아래와 같은 메시지들이 출력됩니다.\n![Certbot 설정 과정](https://fureweb-com.github.io/assets/img/posts/20170807-certbot-process.png)\n\n위 명령을 수행하고 나면, 아래 경로에 총 5개의 파일이 생성되어 있음을 확인할 수 있습니다. (실제로는 /etc/letsencrypt/archive/도메인명 디렉토리 내 파일에 대한 심볼릭 링크 입니다.)\n```bash\n$ ls -al /etc/letsencrypt/live/ssltest.fureweb.com\ntotal 12\ndrwxr-xr-x 2 root root 4096 Aug  7 17:03 ./\ndrwx------ 4 root root 4096 Aug  7 16:56 ../\nlrwxrwxrwx 1 root root   43 Aug  7 17:03 cert.pem -> ../../archive/ssltest.fureweb.com/cert1.pem\nlrwxrwxrwx 1 root root   44 Aug  7 17:03 chain.pem -> ../../archive/ssltest.fureweb.com/chain1.pem\nlrwxrwxrwx 1 root root   48 Aug  7 17:03 fullchain.pem -> ../../archive/ssltest.fureweb.com/fullchain1.pem\nlrwxrwxrwx 1 root root   46 Aug  7 17:03 privkey.pem -> ../../archive/ssltest.fureweb.com/privkey1.pem\n-rw-r--r-- 1 root root  543 Aug  7 17:03 README\n```\n<br>\n이제 ssltest.fureweb.com 이라는 도메인에 대한 ssl 요청을 처리하기위해 필요한 인증서가 준비된 상태가 되었습니다. nginx가 이 인증서를 통해 https 요청을 처리할 수 있도록, 아까 설정했던 conf 파일을 아래와 같이 수정해 보겠습니다.  \n\n```bash\n# 아래 명령어로 기존 설정파일 편집\n$ vi /etc/nginx/conf.d/ssltest.fureweb.com.conf\n\n# 다음과 같은 형태가 되어야합니다.\nserver {\n    # http://ssltest.fureweb.com 요청에 대해\n    # https://ssltest.fureweb.com 으로 리다이렉트 처리합니다. \n    listen 80;\n    server_name ssltest.fureweb.com;\n    return 301 https://ssltest.fureweb.com;\n}\n\nserver {\n    # https://ssltest.fureweb.com 으로의 요청을 리스닝합니다.\n    listen 443;\n    server_name ssltest.fureweb.com;\n\n    ssl on;\n    ssl_certificate /etc/letsencrypt/live/ssltest.fureweb.com/fullchain.pem;\n    ssl_certificate_key /etc/letsencrypt/live/ssltest.fureweb.com/privkey.pem;\n\n    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;\n    ssl_ciphers HIGH:!aNULL:!MD5;\n\n    # 예제에서는 이 외에 별도 설정을 추가하지 않고, SSL 요청이 정상적으로 처리되는지만 확인합니다.\n    # 일반적으로 아래에는 현재 도메인과 연결된 document_root 등에 대한 설정 기술하거나\n    # proxy 설정을 통해 동적 처리가 가능한 다른 WAS와 연동하여 응답을 핸들링합니다.\n}\n\n```\n<br>\n위 설정을 저장한 뒤, conf 파일에 오타는 없는지 확인하고 문제가 없다면 설정 내용을 적용시킵니다.\n\n```bash\n# 설정 파일들에 오류가 없는지 확인한 뒤\n$ nginx -t\nnginx: the configuration file /etc/nginx/nginx.conf syntax is ok\nnginx: configuration file /etc/nginx/nginx.conf test is successful\n# 오류가 없다면 설정 파일 내용을 적용합니다.\n$ nginx -s reload\n```\n<br>\n\n# 최종 확인\n---\n\n브라우저의 주소창에 https://ssltest.fureweb.com를 입력하여 연결이 제대로 이뤄지는지 확인합니다. 브라우저 캐시로 인해 https로 리다이렉트 처리가 되지 않은 페이지를 보여줄 수 있으니, 크롬 기준으로 강력 새로고침을 실행시켜주세요.\n\n브라우저 주소표시줄 좌측에 자물쇠가 활성화 된 모습을 확인하실 수 있게 됩니다.  \n~~주소가 ssltest2.fureweb.com인건 무시해주세요... -_-;~~\n\n![SSL 적용 완료](https://fureweb-com.github.io/assets/img/posts/20170807-ssl-connection.png)\n\n\n# 마치며\n---\n\n우분투 서버를 생성하는 것 부터 Nginx 설치 및 설정, 그리고 SSL 적용하기까지 모든 과정에 대해 확인해 보았습니다. 혹시라도 본 포스트를 보고 막히는 부분이 있거나 설명이 부족한 부분이 있다면 언제든지 댓글이나 질문 부탁 드리겠습니다.  \n\n읽어주셔서 감사합니다!",
      "json_metadata": "{\"tags\":[\"kr\",\"kr-dev\",\"ubuntu\",\"letsencrypt\",\"ssl\"],\"image\":[\"https://steemitimages.com/DQmT5UFQLESiCLNpXWp4EAyr2sTi5dZBphFoLYBzQ8v6CUd/20170807-nginx-status.png\",\"https://fureweb-com.github.io/assets/img/posts/20170807-set-host-ip.png\",\"https://fureweb-com.github.io/assets/img/posts/20170807-certbot-process.png\",\"https://fureweb-com.github.io/assets/img/posts/20170807-ssl-connection.png\"],\"links\":[\"https://fureweb-com.github.io/blog/2017/08/07/applying-free-ssl-to-your-ubuntu-server-using-nginx-and-let'sencrypt-from-scratch.html\",\"http://www.mingw.org/\",\"https://www.chiark.greenend.org.uk/~sgtatham/putty/latest.html\",\"//iwinv.kr\",\"https://ssltest.fureweb.com\"],\"app\":\"steemit/0.1\",\"format\":\"markdown\"}",
      "parent_author": "",
      "parent_permlink": "ssl",
      "permlink": "nginx-ssl",
      "title": "우분투에서 nginx 설치부터 무료 SSL 적용까지"
    }
  ],
  "op_in_trx": 0,
  "timestamp": "2018-02-22T14:16:48",
  "trx_id": "d65ba110ce0c808b59a2c90e055a9233c3a2c577",
  "trx_in_block": 42,
  "virtual_op": 0
}
2018/02/22 13:19:51
authorsteemitboard
permlinksteemitboard-notify-fureweb-20180222t105341000z
voterfureweb
weight10000 (100.00%)
Transaction InfoBlock #20093625/Trx 2b9124d5bace679dccc32ea1571d29ec1908a6a1
View Raw JSON Data
{
  "block": 20093625,
  "op": [
    "vote",
    {
      "author": "steemitboard",
      "permlink": "steemitboard-notify-fureweb-20180222t105341000z",
      "voter": "fureweb",
      "weight": 10000
    }
  ],
  "op_in_trx": 0,
  "timestamp": "2018-02-22T13:19:51",
  "trx_id": "2b9124d5bace679dccc32ea1571d29ec1908a6a1",
  "trx_in_block": 28,
  "virtual_op": 0
}
2018/02/22 10:53:42
authorfureweb
permlinknginx-ssl
votersteemitboard
weight100 (1.00%)
Transaction InfoBlock #20090702/Trx 97a0e9490f9c1de3c5e78b3fcfc6e153769029e0
View Raw JSON Data
{
  "block": 20090702,
  "op": [
    "vote",
    {
      "author": "fureweb",
      "permlink": "nginx-ssl",
      "voter": "steemitboard",
      "weight": 100
    }
  ],
  "op_in_trx": 0,
  "timestamp": "2018-02-22T10:53:42",
  "trx_id": "97a0e9490f9c1de3c5e78b3fcfc6e153769029e0",
  "trx_in_block": 10,
  "virtual_op": 0
}
2018/02/22 10:53:39
authorsteemitboard
bodyCongratulations @fureweb! You have completed some achievement on Steemit and have been rewarded with new badge(s) : [![](https://steemitimages.com/70x80/http://steemitboard.com/notifications/comments.png)](http://steemitboard.com/@fureweb) Award for the number of comments Click on any badge to view your own Board of Honor on SteemitBoard. To support your work, I also upvoted your post! For more information about SteemitBoard, click [here](https://steemit.com/@steemitboard) If you no longer want to receive notifications, reply to this comment with the word `STOP` > Upvote this notification to help all Steemit users. Learn why [here](https://steemit.com/steemitboard/@steemitboard/http-i-cubeupload-com-7ciqeo-png)!
json metadata{"image":["https://steemitboard.com/img/notifications.png"]}
parent authorfureweb
parent permlinknginx-ssl
permlinksteemitboard-notify-fureweb-20180222t105341000z
title
Transaction InfoBlock #20090701/Trx a829495d8b3cf464cce847f0113b52a7cea7156b
View Raw JSON Data
{
  "block": 20090701,
  "op": [
    "comment",
    {
      "author": "steemitboard",
      "body": "Congratulations @fureweb! You have completed some achievement on Steemit and have been rewarded with new badge(s) :\n\n[![](https://steemitimages.com/70x80/http://steemitboard.com/notifications/comments.png)](http://steemitboard.com/@fureweb) Award for the number of comments\n\nClick on any badge to view your own Board of Honor on SteemitBoard.\n\nTo support your work, I also upvoted your post!\nFor more information about SteemitBoard, click [here](https://steemit.com/@steemitboard)\n\nIf you no longer want to receive notifications, reply to this comment with the word `STOP`\n\n> Upvote this notification to help all Steemit users. Learn why [here](https://steemit.com/steemitboard/@steemitboard/http-i-cubeupload-com-7ciqeo-png)!",
      "json_metadata": "{\"image\":[\"https://steemitboard.com/img/notifications.png\"]}",
      "parent_author": "fureweb",
      "parent_permlink": "nginx-ssl",
      "permlink": "steemitboard-notify-fureweb-20180222t105341000z",
      "title": ""
    }
  ],
  "op_in_trx": 0,
  "timestamp": "2018-02-22T10:53:39",
  "trx_id": "a829495d8b3cf464cce847f0113b52a7cea7156b",
  "trx_in_block": 35,
  "virtual_op": 0
}
kdjupvoted (50.00%) @fureweb / nginx-ssl
2018/02/22 07:44:48
authorfureweb
permlinknginx-ssl
voterkdj
weight5000 (50.00%)
Transaction InfoBlock #20086925/Trx 85bac26d4aa761e95482613e7e606faa9b9b284c
View Raw JSON Data
{
  "block": 20086925,
  "op": [
    "vote",
    {
      "author": "fureweb",
      "permlink": "nginx-ssl",
      "voter": "kdj",
      "weight": 5000
    }
  ],
  "op_in_trx": 0,
  "timestamp": "2018-02-22T07:44:48",
  "trx_id": "85bac26d4aa761e95482613e7e606faa9b9b284c",
  "trx_in_block": 21,
  "virtual_op": 0
}
furewebpublished a new post: nginx-ssl
2018/02/22 06:17:24
authorfureweb
body# 들어가기 전에 --- 1. 아직 아래 link들에 대해 새창 열기 기능이 steemit에서 지원되지 않는 것 같습니다. 혹시라도 아래에 등장하는 링크를 클릭하시려면 우클릭 후 새창에서 열어 확인해 주세요! 2. 또한 syntax highlighting이 제대로 지원되지 않는 것 같아서, 혹시라도 보기 불편하신 점이 있다면 아래의 링크를 통해 원본 게시글을 확인하실 수도 있습니다. [https://fureweb-com.github.io/blog/2017/08/07/applying-free-ssl-to-your-ubuntu-server-using-nginx-and-let'sencrypt-from-scratch.html](https://fureweb-com.github.io/blog/2017/08/07/applying-free-ssl-to-your-ubuntu-server-using-nginx-and-let'sencrypt-from-scratch.html) # 개요 --- 본 튜토리얼은 다음의 순서대로 진행됩니다. - 우분투 VPS 생성 - nginx 설치 및 설정 - 도메인 Host IP 설정 및 확인 - Certbot 설치 및 설정 - 최종 확인 - 마치며 windows 환경에서 아래 예제를 실행하셔야 하는 분들은 [mingw](http://www.mingw.org/), [putty](https://www.chiark.greenend.org.uk/~sgtatham/putty/latest.html), windows 10 bash 등을 통해 bash shell을 사용하실 수 있습니다. 본 포스트의 내용은 로컬머신에서 bash shell을 사용할 수 있음을 전제하여 작성했습니다. 또한 vi를 사용할 수 있음을 전제하였으나, vi 사용이 어려우신 경우 nano에 대한 사용 방법을 검색하신 뒤 예제를 따라하시는 것을 추천드립니다. 그런 경우 아래에 표시한 vi 명령을 nano 명령으로 대신하시기 바랍니다. # 우분투 VPS 생성 --- 자신이 사용할 수 있는 클라우드 서비스 내 VPS를 Ubuntu 16.04 LTS 버전으로 생성합니다. 저는 개인적으로 제가 알고있는 한 가장 간단하고 저렴하게 VPS를 생성할 수 있는 [iwinv.kr 클라우드 서비스](//iwinv.kr)를 이용하여 VPS를 생성하도록 하겠습니다. 아래 예제에서는 Ubuntu 16.04 LTS(32bit) 버전으로 VPS를 생성하여 예제를 진행하게 됩니다. 편의상 root 계정으로 아래 예제를 수행하겠습니다. 방화벽 설정과 관련된 부분은 이 포스팅의 주제를 벗어나므로, 가능하다면 VPS 생성 시 방화벽은 사용하지 않음으로 설정하셔서 예제를 실습하시기를 희망합니다. # nginx 설치 및 설정 --- ssh 클라이언트를 이용하여 방금 막 생성한 VPS로 접속합니다. 접속 후 다음의 명령을 차례대로 실행하여 nginx를 서버에 설치한 뒤, 상태를 확인합니다. ```bash $ ssh root@your-vps-ip # 로그인 완료 후 아래 명령을 실행합니다. $ apt-get update $ apt-get install nginx ``` 설치 후 nginx 실행 상태를 다음과 같이 확인할 수 있습니다. ```bash $ service nginx status ``` ![nginx 설치 후 상태 확인](https://steemitimages.com/DQmT5UFQLESiCLNpXWp4EAyr2sTi5dZBphFoLYBzQ8v6CUd/20170807-nginx-status.png) 만약 현재 상태가 inactive라면, 다음의 명령을 통해 nginx 프로세스를 실행시킵니다. ```bash $ service nginx start ``` 설치가 완료된 후 브라우저를 통해 서버의 IP를 입력하여 페이지를 요청하면 welcome to nginx 페이지를 확인할 수 있습니다. 만약 welcome 페이지를 볼수 없다면 방화벽 설정 문제일 가능성이 있습니다. 방화벽과 관련된 부분은 클라우드 서비스 업체마다 설정하는 방법이 다를 수 있으니, 사용하시는 업체의 방화벽 설정 사용 설명을 통해 http 요청을 위한 80번 포트 및 https 요청을 위한 443 포트를 열어둘 수 있도록 합니다. 보유하고 있는 도메인을 현재 VPS로 연결시키기 전, 해당 도메인을 통해 본 서버로 http 요청을 해 오는 경우에 대해 처리할 수 있도록 다음과 같이 nginx 설정을 수행합니다. ```bash # 다음의 경로로 이동하여 ssltest.fureweb.com 도메인 요청에 대한 설정파일을 생성합니다. # 아래 경로에 등록된 conf 확장자를 가진 모든 파일이 nginx.conf파일에 의해 include 되며, # nginx가 실행될 때 본 디렉토리 내 파일들이 해석되게 됩니다. $ cd /etc/nginx/conf.d # 원하는 도메인 명으로 설정 파일을 하나 생성합니다. $ vi ssltest.fureweb.com.conf ``` 아래의 내용을 ssltest.fureweb.com.conf 파일에 입력합니다. ```bash server { listen 80; server_name ssltest.fureweb.com; } ``` 필요한 설정 파일을 생성하였다면, 다음의 명령을 통해 설정에 오타 등의 오류는 없는지 확인한 뒤 설정을 적용합니다. ```bash # 설정 파일들에 오류가 없는지 확인한 뒤 $ nginx -t nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful # 오류가 없다면 설정 파일 내용을 적용합니다. $ nginx -s reload ``` 현재 VPS는 ssltest.fureweb.com에 대한 http 요청을 처리할 수 있는 상태가 되었습니다. 이제 자신이 가지고 있는 도메인 관리업체의 웹사이트에 로그인하여 해당 도메인에 대한 http 요청이 새로 만든 VPS로 전달될 수 있도록 별도의 설정을 진행해 보겠습니다. # 도메인 Host IP 설정 및 확인 --- 본인이 보유하고있는 도메인을 관리하는 업체 사이트에 로그인하여, 자신이 보유한 도메인(또는 서브도메인)에 대한 Host IP를 설정합니다. 예시로, 제가 보유하고 있는 ssltest.fureweb.com 이라는 서브도메인에 대한 http 요청이 방금 만든 VPS 서버로 연결되도록 설정을 추가하겠습니다. 도메인 등록 대행업체마다 설정하는 방법은 다를 수 있으니, 아래 사진을 참고하셔서 비슷한 메뉴에서 설정을 처리해주세요. 일반적으로 DNS 관리 메뉴의 하위 메뉴에서 설정하실 수 있습니다. ![DNS 관리 메뉴 내 host ip 설정](https://fureweb-com.github.io/assets/img/posts/20170807-set-host-ip.png) 만약 이전에 해당 도메인으로의 연결을 한 적이 있다면, 로컬 PC의 DNS캐시를 삭제해야합니다. 없다면 무시하셔도 됩니다. ```bash # OSX 10.10.4 이상인 경우 $ killall -HUP mDNSResponder # Windows 10을 사용하는 경우 - powershell 또는 cmd에서 ipconfig /flushdns # 죄송하지만 이 외에는 검색해 주세요 -_-;; ``` 브라우저가 크롬이라면, 주소표시줄에 다음의 경로를 복사&붙여넣기하여 조회되는 화면에서 `Clear Host Cache` 버튼을 클릭하여 캐시를 삭제하세요. ```url chrome://net-internals/#dns ``` 모든 설정에 문제가 없다면, 이제 웹 브라우저를 통해 내가 가지고 있는 도메인에 대한 연결 요청이 방금 만든 VPS로 전달되게 됩니다. 단, 도메인 관리 업체마다 해당 적용값이 얼마나 빨리 반영되는지는 차이가 있을 수 있으므로, 충분한 시간을 두고 확인을 진행해 주세요. 통상 1~2분 내에는 적용되는 걸로 알고 있으나, 다른 업체는 어떤지 사용해보지 않아서 잘 모르겠네요. ^^; # Certbot 설치 및 설정 --- 먼저 certbot을 설치합니다. ```bash $ add-apt-repository ppa:certbot/certbot ``` <br> 해당 저장소에 담긴 패키지 정보를 확인할 수 있도록 다음과 같이 업데이트를 수행합니다. ```bash $ apt-get update ``` <br> `apt-get`을 이용하여 Certbot을 설치합니다. ```bash $ apt-get install python-certbot-nginx ``` <br> 설치된 certbot을 이용하여 ssltest.fureweb.com 도메인에 대한 SSL 인증서만 발급받도록 합니다. ```bash $ certbot certonly --nginx -d ssltest.fureweb.com # 위 명령을 실행하면 해당 도메인을 관리하는 사람의 이메일 주소를 입력하라고 나옵니다. 입력해 주세요. # 만료일에 대한 정보를 보내줍니다. # 약관에는 동의(A)하셔야 하며, # EFF 재단과의 이메일을 공유할지 여부를 묻는 부분에 대해서는 원하시는대로 진행하시면 됩니다. ``` <br> 아래와 같은 메시지들이 출력됩니다. ![Certbot 설정 과정](https://fureweb-com.github.io/assets/img/posts/20170807-certbot-process.png) 위 명령을 수행하고 나면, 아래 경로에 총 5개의 파일이 생성되어 있음을 확인할 수 있습니다. (실제로는 /etc/letsencrypt/archive/도메인명 디렉토리 내 파일에 대한 심볼릭 링크 입니다.) ```bash $ ls -al /etc/letsencrypt/live/ssltest.fureweb.com total 12 drwxr-xr-x 2 root root 4096 Aug 7 17:03 ./ drwx------ 4 root root 4096 Aug 7 16:56 ../ lrwxrwxrwx 1 root root 43 Aug 7 17:03 cert.pem -> ../../archive/ssltest.fureweb.com/cert1.pem lrwxrwxrwx 1 root root 44 Aug 7 17:03 chain.pem -> ../../archive/ssltest.fureweb.com/chain1.pem lrwxrwxrwx 1 root root 48 Aug 7 17:03 fullchain.pem -> ../../archive/ssltest.fureweb.com/fullchain1.pem lrwxrwxrwx 1 root root 46 Aug 7 17:03 privkey.pem -> ../../archive/ssltest.fureweb.com/privkey1.pem -rw-r--r-- 1 root root 543 Aug 7 17:03 README ``` <br> 이제 ssltest.fureweb.com 이라는 도메인에 대한 ssl 요청을 처리하기위해 필요한 인증서가 준비된 상태가 되었습니다. nginx가 이 인증서를 통해 https 요청을 처리할 수 있도록, 아까 설정했던 conf 파일을 아래와 같이 수정해 보겠습니다. ```bash # 아래 명령어로 기존 설정파일 편집 $ vi /etc/nginx/conf.d/ssltest.fureweb.com.conf # 다음과 같은 형태가 되어야합니다. server { # http://ssltest.fureweb.com 요청에 대해 # https://ssltest.fureweb.com 으로 리다이렉트 처리합니다. listen 80; server_name ssltest.fureweb.com; return 301 https://ssltest.fureweb.com; } server { # https://ssltest.fureweb.com 으로의 요청을 리스닝합니다. listen 443; server_name ssltest.fureweb.com; ssl on; ssl_certificate /etc/letsencrypt/live/ssltest.fureweb.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/ssltest.fureweb.com/privkey.pem; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_ciphers HIGH:!aNULL:!MD5; # 예제에서는 이 외에 별도 설정을 추가하지 않고, SSL 요청이 정상적으로 처리되는지만 확인합니다. # 일반적으로 아래에는 현재 도메인과 연결된 document_root 등에 대한 설정 기술하거나 # proxy 설정을 통해 동적 처리가 가능한 다른 WAS와 연동하여 응답을 핸들링합니다. } ``` <br> 위 설정을 저장한 뒤, conf 파일에 오타는 없는지 확인하고 문제가 없다면 설정 내용을 적용시킵니다. ```bash # 설정 파일들에 오류가 없는지 확인한 뒤 $ nginx -t nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful # 오류가 없다면 설정 파일 내용을 적용합니다. $ nginx -s reload ``` <br> # 최종 확인 --- 브라우저의 주소창에 https://ssltest.fureweb.com를 입력하여 연결이 제대로 이뤄지는지 확인합니다. 브라우저 캐시로 인해 https로 리다이렉트 처리가 되지 않은 페이지를 보여줄 수 있으니, 크롬 기준으로 강력 새로고침을 실행시켜주세요. 브라우저 주소표시줄 좌측에 자물쇠가 활성화 된 모습을 확인하실 수 있게 됩니다. ~~주소가 ssltest2.fureweb.com인건 무시해주세요... -_-;~~ ![SSL 적용 완료](https://fureweb-com.github.io/assets/img/posts/20170807-ssl-connection.png) # 마치며 --- 우분투 서버를 생성하는 것 부터 Nginx 설치 및 설정, 그리고 SSL 적용하기까지 모든 과정에 대해 확인해 보았습니다. 혹시라도 본 포스트를 보고 막히는 부분이 있거나 설명이 부족한 부분이 있다면 언제든지 댓글이나 질문 부탁 드리겠습니다. 읽어주셔서 감사합니다!
json metadata{"tags":["kr","kr-dev","ubuntu","letsencrypt","ssl"],"image":["https://steemitimages.com/DQmT5UFQLESiCLNpXWp4EAyr2sTi5dZBphFoLYBzQ8v6CUd/20170807-nginx-status.png","https://fureweb-com.github.io/assets/img/posts/20170807-set-host-ip.png","https://fureweb-com.github.io/assets/img/posts/20170807-certbot-process.png","https://fureweb-com.github.io/assets/img/posts/20170807-ssl-connection.png"],"links":["https://fureweb-com.github.io/blog/2017/08/07/applying-free-ssl-to-your-ubuntu-server-using-nginx-and-let'sencrypt-from-scratch.html","http://www.mingw.org/","https://www.chiark.greenend.org.uk/~sgtatham/putty/latest.html","//iwinv.kr","https://ssltest.fureweb.com"],"app":"steemit/0.1","format":"markdown"}
parent author
parent permlinkssl
permlinknginx-ssl
title우분투에서 nginx 설치부터 무료 SSL 적용까지
Transaction InfoBlock #20085177/Trx 2e533af4747e63b69fc69f2cbb1fdf689d7d75fe
View Raw JSON Data
{
  "block": 20085177,
  "op": [
    "comment",
    {
      "author": "fureweb",
      "body": "# 들어가기 전에\n---\n1. 아직 아래 link들에 대해 새창 열기 기능이 steemit에서 지원되지 않는 것 같습니다. 혹시라도 아래에 등장하는 링크를 클릭하시려면 우클릭 후 새창에서 열어 확인해 주세요! \n2. 또한 syntax highlighting이 제대로 지원되지 않는 것 같아서, 혹시라도 보기 불편하신 점이 있다면 아래의 링크를 통해 원본 게시글을 확인하실 수도 있습니다.\n[https://fureweb-com.github.io/blog/2017/08/07/applying-free-ssl-to-your-ubuntu-server-using-nginx-and-let'sencrypt-from-scratch.html](https://fureweb-com.github.io/blog/2017/08/07/applying-free-ssl-to-your-ubuntu-server-using-nginx-and-let'sencrypt-from-scratch.html)\n\n# 개요\n---\n\n본 튜토리얼은 다음의 순서대로 진행됩니다.\n\n- 우분투 VPS 생성\n- nginx 설치 및 설정\n- 도메인 Host IP 설정 및 확인\n- Certbot 설치 및 설정\n- 최종 확인\n- 마치며\n\nwindows 환경에서 아래 예제를 실행하셔야 하는 분들은 [mingw](http://www.mingw.org/), [putty](https://www.chiark.greenend.org.uk/~sgtatham/putty/latest.html), windows 10 bash 등을 통해 bash shell을 사용하실 수 있습니다. 본 포스트의 내용은 로컬머신에서 bash shell을 사용할 수 있음을 전제하여 작성했습니다.  \n\n또한 vi를 사용할 수 있음을 전제하였으나, vi 사용이 어려우신 경우 nano에 대한 사용 방법을 검색하신 뒤 예제를 따라하시는 것을 추천드립니다. 그런 경우 아래에 표시한 vi 명령을 nano 명령으로 대신하시기 바랍니다.\n\n# 우분투 VPS 생성\n---\n\n자신이 사용할 수 있는 클라우드 서비스 내 VPS를 Ubuntu 16.04 LTS 버전으로 생성합니다. 저는 개인적으로 제가 알고있는 한 가장 간단하고 저렴하게 VPS를 생성할 수 있는 [iwinv.kr 클라우드 서비스](//iwinv.kr)를 이용하여 VPS를 생성하도록 하겠습니다.\n\n아래 예제에서는 Ubuntu 16.04 LTS(32bit) 버전으로 VPS를 생성하여 예제를 진행하게 됩니다. 편의상 root 계정으로 아래 예제를 수행하겠습니다.\n\n방화벽 설정과 관련된 부분은 이 포스팅의 주제를 벗어나므로, 가능하다면 VPS 생성 시 방화벽은 사용하지 않음으로 설정하셔서 예제를 실습하시기를 희망합니다.\n\n# nginx 설치 및 설정\n---\n\nssh 클라이언트를 이용하여 방금 막 생성한 VPS로 접속합니다. 접속 후 다음의 명령을 차례대로 실행하여 nginx를 서버에 설치한 뒤, 상태를 확인합니다.  \n\n```bash\n$ ssh root@your-vps-ip\n# 로그인 완료 후 아래 명령을 실행합니다.\n$ apt-get update\n$ apt-get install nginx\n```\n\n설치 후 nginx 실행 상태를 다음과 같이 확인할 수 있습니다.\n\n```bash\n$ service nginx status\n```\n  \n![nginx 설치 후 상태 확인](https://steemitimages.com/DQmT5UFQLESiCLNpXWp4EAyr2sTi5dZBphFoLYBzQ8v6CUd/20170807-nginx-status.png)\n  \n만약 현재 상태가 inactive라면, 다음의 명령을 통해 nginx 프로세스를 실행시킵니다.\n```bash\n$ service nginx start\n```\n  \n설치가 완료된 후 브라우저를 통해 서버의 IP를 입력하여 페이지를 요청하면 welcome to nginx 페이지를 확인할 수 있습니다. 만약 welcome 페이지를 볼수 없다면 방화벽 설정 문제일 가능성이 있습니다. 방화벽과 관련된 부분은 클라우드 서비스 업체마다 설정하는 방법이 다를 수 있으니, 사용하시는 업체의 방화벽 설정 사용 설명을 통해 http 요청을 위한 80번 포트 및 https 요청을 위한 443 포트를 열어둘 수 있도록 합니다.\n\n보유하고 있는 도메인을 현재 VPS로 연결시키기 전, 해당 도메인을 통해 본 서버로 http 요청을 해 오는 경우에 대해 처리할 수 있도록 다음과 같이 nginx 설정을 수행합니다.\n\n```bash\n# 다음의 경로로 이동하여 ssltest.fureweb.com 도메인 요청에 대한 설정파일을 생성합니다.\n# 아래 경로에 등록된 conf 확장자를 가진 모든 파일이 nginx.conf파일에 의해 include 되며, \n# nginx가 실행될 때 본 디렉토리 내 파일들이 해석되게 됩니다.\n$ cd /etc/nginx/conf.d\n\n# 원하는 도메인 명으로 설정 파일을 하나 생성합니다.\n$ vi ssltest.fureweb.com.conf\n```\n  \n아래의 내용을 ssltest.fureweb.com.conf 파일에 입력합니다.\n```bash\nserver {\n  listen 80;\n  server_name ssltest.fureweb.com;\n}\n```\n\n필요한 설정 파일을 생성하였다면, 다음의 명령을 통해 설정에 오타 등의 오류는 없는지 확인한 뒤 설정을 적용합니다.\n```bash\n# 설정 파일들에 오류가 없는지 확인한 뒤\n$ nginx -t\nnginx: the configuration file /etc/nginx/nginx.conf syntax is ok\nnginx: configuration file /etc/nginx/nginx.conf test is successful\n# 오류가 없다면 설정 파일 내용을 적용합니다.\n$ nginx -s reload\n```\n\n현재 VPS는 ssltest.fureweb.com에 대한 http 요청을 처리할 수 있는 상태가 되었습니다. 이제 자신이 가지고 있는 도메인 관리업체의 웹사이트에 로그인하여 해당 도메인에 대한 http 요청이 새로 만든 VPS로 전달될 수 있도록 별도의 설정을 진행해 보겠습니다.\n\n\n# 도메인 Host IP 설정 및 확인\n---\n\n본인이 보유하고있는 도메인을 관리하는 업체 사이트에 로그인하여, 자신이 보유한 도메인(또는 서브도메인)에 대한 Host IP를 설정합니다. \n\n예시로, 제가 보유하고 있는 ssltest.fureweb.com 이라는 서브도메인에 대한 http 요청이 방금 만든 VPS 서버로 연결되도록 설정을 추가하겠습니다. 도메인 등록 대행업체마다 설정하는 방법은 다를 수 있으니, 아래 사진을 참고하셔서 비슷한 메뉴에서 설정을 처리해주세요. 일반적으로 DNS 관리 메뉴의 하위 메뉴에서 설정하실 수 있습니다.\n\n![DNS 관리 메뉴 내 host ip 설정](https://fureweb-com.github.io/assets/img/posts/20170807-set-host-ip.png)\n\n만약 이전에 해당 도메인으로의 연결을 한 적이 있다면, 로컬 PC의 DNS캐시를 삭제해야합니다. 없다면 무시하셔도 됩니다.\n```bash\n# OSX 10.10.4 이상인 경우\n$ killall -HUP mDNSResponder\n\n# Windows 10을 사용하는 경우 - powershell 또는 cmd에서\nipconfig /flushdns\n\n# 죄송하지만 이 외에는 검색해 주세요 -_-;;\n```\n\n브라우저가 크롬이라면, 주소표시줄에 다음의 경로를 복사&붙여넣기하여 조회되는 화면에서 `Clear Host Cache` 버튼을 클릭하여 캐시를 삭제하세요.  \n```url\nchrome://net-internals/#dns\n```\n\n모든 설정에 문제가 없다면, 이제 웹 브라우저를 통해 내가 가지고 있는 도메인에 대한 연결 요청이 방금 만든 VPS로 전달되게 됩니다. 단, 도메인 관리 업체마다 해당 적용값이 얼마나 빨리 반영되는지는 차이가 있을 수 있으므로, 충분한 시간을 두고 확인을 진행해 주세요. 통상 1~2분 내에는 적용되는 걸로 알고 있으나, 다른 업체는 어떤지 사용해보지 않아서 잘 모르겠네요. ^^;\n\n# Certbot 설치 및 설정\n---\n\n먼저 certbot을 설치합니다.\n```bash\n$ add-apt-repository ppa:certbot/certbot\n```\n<br>\n해당 저장소에 담긴 패키지 정보를 확인할 수 있도록 다음과 같이 업데이트를 수행합니다.\n```bash\n$ apt-get update\n```\n<br>\n`apt-get`을 이용하여 Certbot을 설치합니다.\n```bash\n$ apt-get install python-certbot-nginx\n```\n<br>\n설치된 certbot을 이용하여 ssltest.fureweb.com 도메인에 대한 SSL 인증서만 발급받도록 합니다.\n\n```bash\n$ certbot certonly --nginx -d ssltest.fureweb.com\n# 위 명령을 실행하면 해당 도메인을 관리하는 사람의 이메일 주소를 입력하라고 나옵니다. 입력해 주세요.\n# 만료일에 대한 정보를 보내줍니다.\n# 약관에는 동의(A)하셔야 하며,\n# EFF 재단과의 이메일을 공유할지 여부를 묻는 부분에 대해서는 원하시는대로 진행하시면 됩니다.\n```\n<br>\n아래와 같은 메시지들이 출력됩니다.\n![Certbot 설정 과정](https://fureweb-com.github.io/assets/img/posts/20170807-certbot-process.png)\n\n위 명령을 수행하고 나면, 아래 경로에 총 5개의 파일이 생성되어 있음을 확인할 수 있습니다. (실제로는 /etc/letsencrypt/archive/도메인명 디렉토리 내 파일에 대한 심볼릭 링크 입니다.)\n```bash\n$ ls -al /etc/letsencrypt/live/ssltest.fureweb.com\ntotal 12\ndrwxr-xr-x 2 root root 4096 Aug  7 17:03 ./\ndrwx------ 4 root root 4096 Aug  7 16:56 ../\nlrwxrwxrwx 1 root root   43 Aug  7 17:03 cert.pem -> ../../archive/ssltest.fureweb.com/cert1.pem\nlrwxrwxrwx 1 root root   44 Aug  7 17:03 chain.pem -> ../../archive/ssltest.fureweb.com/chain1.pem\nlrwxrwxrwx 1 root root   48 Aug  7 17:03 fullchain.pem -> ../../archive/ssltest.fureweb.com/fullchain1.pem\nlrwxrwxrwx 1 root root   46 Aug  7 17:03 privkey.pem -> ../../archive/ssltest.fureweb.com/privkey1.pem\n-rw-r--r-- 1 root root  543 Aug  7 17:03 README\n```\n<br>\n이제 ssltest.fureweb.com 이라는 도메인에 대한 ssl 요청을 처리하기위해 필요한 인증서가 준비된 상태가 되었습니다. nginx가 이 인증서를 통해 https 요청을 처리할 수 있도록, 아까 설정했던 conf 파일을 아래와 같이 수정해 보겠습니다.  \n\n```bash\n# 아래 명령어로 기존 설정파일 편집\n$ vi /etc/nginx/conf.d/ssltest.fureweb.com.conf\n\n# 다음과 같은 형태가 되어야합니다.\nserver {\n    # http://ssltest.fureweb.com 요청에 대해\n    # https://ssltest.fureweb.com 으로 리다이렉트 처리합니다. \n    listen 80;\n    server_name ssltest.fureweb.com;\n    return 301 https://ssltest.fureweb.com;\n}\n\nserver {\n    # https://ssltest.fureweb.com 으로의 요청을 리스닝합니다.\n    listen 443;\n    server_name ssltest.fureweb.com;\n\n    ssl on;\n    ssl_certificate /etc/letsencrypt/live/ssltest.fureweb.com/fullchain.pem;\n    ssl_certificate_key /etc/letsencrypt/live/ssltest.fureweb.com/privkey.pem;\n\n    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;\n    ssl_ciphers HIGH:!aNULL:!MD5;\n\n    # 예제에서는 이 외에 별도 설정을 추가하지 않고, SSL 요청이 정상적으로 처리되는지만 확인합니다.\n    # 일반적으로 아래에는 현재 도메인과 연결된 document_root 등에 대한 설정 기술하거나\n    # proxy 설정을 통해 동적 처리가 가능한 다른 WAS와 연동하여 응답을 핸들링합니다.\n}\n\n```\n<br>\n위 설정을 저장한 뒤, conf 파일에 오타는 없는지 확인하고 문제가 없다면 설정 내용을 적용시킵니다.\n\n```bash\n# 설정 파일들에 오류가 없는지 확인한 뒤\n$ nginx -t\nnginx: the configuration file /etc/nginx/nginx.conf syntax is ok\nnginx: configuration file /etc/nginx/nginx.conf test is successful\n# 오류가 없다면 설정 파일 내용을 적용합니다.\n$ nginx -s reload\n```\n<br>\n\n# 최종 확인\n---\n\n브라우저의 주소창에 https://ssltest.fureweb.com를 입력하여 연결이 제대로 이뤄지는지 확인합니다. 브라우저 캐시로 인해 https로 리다이렉트 처리가 되지 않은 페이지를 보여줄 수 있으니, 크롬 기준으로 강력 새로고침을 실행시켜주세요.\n\n브라우저 주소표시줄 좌측에 자물쇠가 활성화 된 모습을 확인하실 수 있게 됩니다.  \n~~주소가 ssltest2.fureweb.com인건 무시해주세요... -_-;~~\n\n![SSL 적용 완료](https://fureweb-com.github.io/assets/img/posts/20170807-ssl-connection.png)\n\n\n# 마치며\n---\n\n우분투 서버를 생성하는 것 부터 Nginx 설치 및 설정, 그리고 SSL 적용하기까지 모든 과정에 대해 확인해 보았습니다. 혹시라도 본 포스트를 보고 막히는 부분이 있거나 설명이 부족한 부분이 있다면 언제든지 댓글이나 질문 부탁 드리겠습니다.  \n\n읽어주셔서 감사합니다!",
      "json_metadata": "{\"tags\":[\"kr\",\"kr-dev\",\"ubuntu\",\"letsencrypt\",\"ssl\"],\"image\":[\"https://steemitimages.com/DQmT5UFQLESiCLNpXWp4EAyr2sTi5dZBphFoLYBzQ8v6CUd/20170807-nginx-status.png\",\"https://fureweb-com.github.io/assets/img/posts/20170807-set-host-ip.png\",\"https://fureweb-com.github.io/assets/img/posts/20170807-certbot-process.png\",\"https://fureweb-com.github.io/assets/img/posts/20170807-ssl-connection.png\"],\"links\":[\"https://fureweb-com.github.io/blog/2017/08/07/applying-free-ssl-to-your-ubuntu-server-using-nginx-and-let'sencrypt-from-scratch.html\",\"http://www.mingw.org/\",\"https://www.chiark.greenend.org.uk/~sgtatham/putty/latest.html\",\"//iwinv.kr\",\"https://ssltest.fureweb.com\"],\"app\":\"steemit/0.1\",\"format\":\"markdown\"}",
      "parent_author": "",
      "parent_permlink": "ssl",
      "permlink": "nginx-ssl",
      "title": "우분투에서 nginx 설치부터 무료 SSL 적용까지"
    }
  ],
  "op_in_trx": 0,
  "timestamp": "2018-02-22T06:17:24",
  "trx_id": "2e533af4747e63b69fc69f2cbb1fdf689d7d75fe",
  "trx_in_block": 41,
  "virtual_op": 0
}
2018/02/22 06:12:21
authornhj12311
permlinkre-fureweb-nginx-ssl-20180222t055917201z
voterfureweb
weight10000 (100.00%)
Transaction InfoBlock #20085076/Trx ebabfa9b1f2c8eb51dfa71183f1e9f1d3590a32c
View Raw JSON Data
{
  "block": 20085076,
  "op": [
    "vote",
    {
      "author": "nhj12311",
      "permlink": "re-fureweb-nginx-ssl-20180222t055917201z",
      "voter": "fureweb",
      "weight": 10000
    }
  ],
  "op_in_trx": 0,
  "timestamp": "2018-02-22T06:12:21",
  "trx_id": "ebabfa9b1f2c8eb51dfa71183f1e9f1d3590a32c",
  "trx_in_block": 61,
  "virtual_op": 0
}
furewebpublished a new post: nginx-ssl
2018/02/22 06:11:27
authorfureweb
body# 들어가기 전에 --- 1. 아직 아래 link들에 대해 새창 열기 기능이 steemit에서 지원되지 않는 것 같습니다. 혹시라도 아래에 등장하는 링크를 클릭하시려면 우클릭 후 새창에서 열어 확인해 주세요! 2. 또한 syntax highlighting이 제대로 지원되지 않는 것 같아서, 혹시라도 보기 불편하신 점이 있다면 아래의 링크를 통해 원본 게시글을 확인하실 수도 있습니다. [https://fureweb-com.github.io/blog/2017/08/07/applying-free-ssl-to-your-ubuntu-server-using-nginx-and-let'sencrypt-from-scratch.html](https://fureweb-com.github.io/blog/2017/08/07/applying-free-ssl-to-your-ubuntu-server-using-nginx-and-let'sencrypt-from-scratch.html) # 개요 --- 본 튜토리얼은 다음의 순서대로 진행됩니다. - 우분투 VPS 생성 - nginx 설치 및 설정 - 도메인 Host IP 설정 및 확인 - Certbot 설치 및 설정 - 최종 확인 - 마치며 windows 환경에서 아래 예제를 실행하셔야 하는 분들은 [mingw](http://www.mingw.org/), [putty](https://www.chiark.greenend.org.uk/~sgtatham/putty/latest.html), windows 10 bash 등을 통해 bash shell을 사용하실 수 있습니다. 본 포스트의 내용은 로컬머신에서 bash shell을 사용할 수 있음을 전제하여 작성했습니다. 또한 vi를 사용할 수 있음을 전제하였으나, vi 사용이 어려우신 경우 nano에 대한 사용 방법을 검색하신 뒤 예제를 따라하시는 것을 추천드립니다. 그런 경우 아래에 표시한 vi 명령을 nano 명령으로 대신하시기 바랍니다. # 우분투 VPS 생성 --- 자신이 사용할 수 있는 클라우드 서비스 내 VPS를 Ubuntu 16.04 LTS 버전으로 생성합니다. 저는 개인적으로 제가 알고있는 한 가장 간단하고 저렴하게 VPS를 생성할 수 있는 [iwinv.kr 클라우드 서비스](//iwinv.kr)를 이용하여 VPS를 생성하도록 하겠습니다. 아래 예제에서는 Ubuntu 16.04 LTS(32bit) 버전으로 VPS를 생성하여 예제를 진행하게 됩니다. 편의상 root 계정으로 아래 예제를 수행하겠습니다. 방화벽 설정과 관련된 부분은 이 포스팅의 주제를 벗어나므로, 가능하다면 VPS 생성 시 방화벽은 사용하지 않음으로 설정하셔서 예제를 실습하시기를 희망합니다. # nginx 설치 및 설정 --- ssh 클라이언트를 이용하여 방금 막 생성한 VPS로 접속합니다. 접속 후 다음의 명령을 차례대로 실행하여 nginx를 서버에 설치한 뒤, 상태를 확인합니다. ```bash $ ssh root@your-vps-ip # 로그인 완료 후 아래 명령을 실행합니다. $ apt-get update $ apt-get install nginx ``` 설치 후 nginx 실행 상태를 다음과 같이 확인할 수 있습니다. ```bash $ service nginx status ``` ![nginx 설치 후 상태 확인](https://steemitimages.com/DQmT5UFQLESiCLNpXWp4EAyr2sTi5dZBphFoLYBzQ8v6CUd/20170807-nginx-status.png) 만약 현재 상태가 inactive라면, 다음의 명령을 통해 nginx 프로세스를 실행시킵니다. ```bash $ service nginx start ``` 설치가 완료된 후 브라우저를 통해 서버의 IP를 입력하여 페이지를 요청하면 welcome to nginx 페이지를 확인할 수 있습니다. 만약 welcome 페이지를 볼수 없다면 방화벽 설정 문제일 가능성이 있습니다. 방화벽과 관련된 부분은 클라우드 서비스 업체마다 설정하는 방법이 다를 수 있으니, 사용하시는 업체의 방화벽 설정 사용 설명을 통해 http 요청을 위한 80번 포트 및 https 요청을 위한 443 포트를 열어둘 수 있도록 합니다. 보유하고 있는 도메인을 현재 VPS로 연결시키기 전, 해당 도메인을 통해 본 서버로 http 요청을 해 오는 경우에 대해 처리할 수 있도록 다음과 같이 nginx 설정을 수행합니다. ```bash # 다음의 경로로 이동하여 ssltest.fureweb.com 도메인 요청에 대한 설정파일을 생성합니다. # 아래 경로에 등록된 conf 확장자를 가진 모든 파일이 nginx.conf파일에 의해 include 되며, # nginx가 실행될 때 본 디렉토리 내 파일들이 해석되게 됩니다. $ cd /etc/nginx/conf.d # 원하는 도메인 명으로 설정 파일을 하나 생성합니다. $ vi ssltest.fureweb.com.conf ``` 아래의 내용을 ssltest.fureweb.com.conf 파일에 입력합니다. ```bash server { listen 80; server_name ssltest.fureweb.com; } ``` 필요한 설정 파일을 생성하였다면, 다음의 명령을 통해 설정에 오타 등의 오류는 없는지 확인한 뒤 설정을 적용합니다. ```bash # 설정 파일들에 오류가 없는지 확인한 뒤 $ nginx -t nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful # 오류가 없다면 설정 파일 내용을 적용합니다. $ nginx -s reload ``` 현재 VPS는 ssltest.fureweb.com에 대한 http 요청을 처리할 수 있는 상태가 되었습니다. 이제 자신이 가지고 있는 도메인 관리업체의 웹사이트에 로그인하여 해당 도메인에 대한 http 요청이 새로 만든 VPS로 전달될 수 있도록 별도의 설정을 진행해 보겠습니다. # 도메인 Host IP 설정 및 확인 --- 본인이 보유하고있는 도메인을 관리하는 업체 사이트에 로그인하여, 자신이 보유한 도메인(또는 서브도메인)에 대한 Host IP를 설정합니다. 예시로, 제가 보유하고 있는 ssltest.fureweb.com 이라는 서브도메인에 대한 http 요청이 방금 만든 VPS 서버로 연결되도록 설정을 추가하겠습니다. 도메인 등록 대행업체마다 설정하는 방법은 다를 수 있으니, 아래 사진을 참고하셔서 비슷한 메뉴에서 설정을 처리해주세요. 일반적으로 DNS 관리 메뉴의 하위 메뉴에서 설정하실 수 있습니다. ![DNS 관리 메뉴 내 host ip 설정](https://fureweb-com.github.io/assets/img/posts/20170807-set-host-ip.png) 만약 이전에 해당 도메인으로의 연결을 한 적이 있다면, 로컬 PC의 DNS캐시를 삭제해야합니다. 없다면 무시하셔도 됩니다. ```bash # OSX 10.10.4 이상인 경우 $ killall -HUP mDNSResponder # Windows 10을 사용하는 경우 - powershell 또는 cmd에서 ipconfig /flushdns # 죄송하지만 이 외에는 검색해 주세요 -_-;; ``` 브라우저가 크롬이라면, 주소표시줄에 다음의 경로를 복사&붙여넣기하여 조회되는 화면에서 `Clear Host Cache` 버튼을 클릭하여 캐시를 삭제하세요. ```url chrome://net-internals/#dns ``` 모든 설정에 문제가 없다면, 이제 웹 브라우저를 통해 내가 가지고 있는 도메인에 대한 연결 요청이 방금 만든 VPS로 전달되게 됩니다. 단, 도메인 관리 업체마다 해당 적용값이 얼마나 빨리 반영되는지는 차이가 있을 수 있으므로, 충분한 시간을 두고 확인을 진행해 주세요. 통상 1~2분 내에는 적용되는 걸로 알고 있으나, 다른 업체는 어떤지 사용해보지 않아서 잘 모르겠네요. ^^; # Certbot 설치 및 설정 --- 먼저 certbot을 설치합니다. ```bash $ add-apt-repository ppa:certbot/certbot ``` <br> 해당 저장소에 담긴 패키지 정보를 확인할 수 있도록 다음과 같이 업데이트를 수행합니다. ```bash $ apt-get update ``` <br> `apt-get`을 이용하여 Certbot을 설치합니다. ```bash $ apt-get install python-certbot-nginx ``` <br> 설치된 certbot을 이용하여 ssltest.fureweb.com 도메인에 대한 SSL 인증서만 발급받도록 합니다. ```bash $ certbot certonly --nginx -d ssltest.fureweb.com # 위 명령을 실행하면 해당 도메인을 관리하는 사람의 이메일 주소를 입력하라고 나옵니다. 입력해 주세요. # 만료일에 대한 정보를 보내줍니다. # 약관에는 동의(A)하셔야 하며, # EFF 재단과의 이메일을 공유할지 여부를 묻는 부분에 대해서는 원하시는대로 진행하시면 됩니다. ``` <br> 아래와 같은 메시지들이 출력됩니다. ![Certbot 설정 과정](https://fureweb-com.github.io/assets/img/posts/20170807-certbot-process.png) 위 명령을 수행하고 나면, 아래 경로에 총 5개의 파일이 생성되어 있음을 확인할 수 있습니다. (실제로는 /etc/letsencrypt/archive/도메인명 디렉토리 내 파일에 대한 심볼릭 링크 입니다.) ```bash $ ls -al /etc/letsencrypt/live/ssltest.fureweb.com total 12 drwxr-xr-x 2 root root 4096 Aug 7 17:03 ./ drwx------ 4 root root 4096 Aug 7 16:56 ../ lrwxrwxrwx 1 root root 43 Aug 7 17:03 cert.pem -> ../../archive/ssltest.fureweb.com/cert1.pem lrwxrwxrwx 1 root root 44 Aug 7 17:03 chain.pem -> ../../archive/ssltest.fureweb.com/chain1.pem lrwxrwxrwx 1 root root 48 Aug 7 17:03 fullchain.pem -> ../../archive/ssltest.fureweb.com/fullchain1.pem lrwxrwxrwx 1 root root 46 Aug 7 17:03 privkey.pem -> ../../archive/ssltest.fureweb.com/privkey1.pem -rw-r--r-- 1 root root 543 Aug 7 17:03 README ``` <br> 이제 ssltest.fureweb.com 이라는 도메인에 대한 ssl 요청을 처리하기위해 필요한 인증서가 준비된 상태가 되었습니다. nginx가 이 인증서를 통해 https 요청을 처리할 수 있도록, 아까 설정했던 conf 파일을 아래와 같이 수정해 보겠습니다. ```bash # 아래 명령어로 기존 설정파일 편집 $ vi /etc/nginx/conf.d/ssltest.fureweb.com.conf # 다음과 같은 형태가 되어야합니다. server { # http://ssltest.fureweb.com 요청에 대해 # https://ssltest.fureweb.com 으로 리다이렉트 처리합니다. listen 80; server_name ssltest.fureweb.com; return 301 https://ssltest.fureweb.com; } server { # https://ssltest.fureweb.com 으로의 요청을 리스닝합니다. listen 443; server_name ssltest.fureweb.com; ssl on; ssl_certificate /etc/letsencrypt/live/ssltest.fureweb.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/ssltest.fureweb.com/privkey.pem; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_ciphers HIGH:!aNULL:!MD5; # 예제에서는 이 외에 별도 설정을 추가하지 않고, SSL 요청이 정상적으로 처리되는지만 확인합니다. # 일반적으로 아래에는 현재 도메인과 연결된 document_root 등에 대한 설정 기술하거나 # proxy 설정을 통해 동적 처리가 가능한 다른 WAS와 연동하여 응답을 핸들링합니다. } ``` <br> 위 설정을 저장한 뒤, conf 파일에 오타는 없는지 확인하고 문제가 없다면 설정 내용을 적용시킵니다. ```bash # 설정 파일들에 오류가 없는지 확인한 뒤 $ nginx -t nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful # 오류가 없다면 설정 파일 내용을 적용합니다. $ nginx -s reload ``` <br> # 최종 확인 --- 브라우저의 주소창에 https://ssltest.fureweb.com를 입력하여 연결이 제대로 이뤄지는지 확인합니다. 브라우저 캐시로 인해 https로 리다이렉트 처리가 되지 않은 페이지를 보여줄 수 있으니, 크롬 기준으로 강력 새로고침을 실행시켜주세요. 브라우저 주소표시줄 좌측에 자물쇠가 활성화 된 모습을 확인하실 수 있게 됩니다. ~~주소가 ssltest2.fureweb.com인건 무시해주세요... -_-;~~ ![SSL 적용 완료](https://fureweb-com.github.io/assets/img/posts/20170807-ssl-connection.png) # 마치며 --- 우분투 서버를 생성하는 것 부터 Nginx 설치 및 설정, 그리고 SSL 적용하기까지 모든 과정에 대해 확인해 보았습니다. 혹시라도 본 포스트를 보고 막히는 부분이 있거나 설명이 부족한 부분이 있다면 언제든지 댓글이나 질문 부탁 드리겠습니다. 읽어주셔서 감사합니다!
json metadata{"tags":["nginx","ubuntu","letsencrypt","vps","ssl"],"image":["https://steemitimages.com/DQmT5UFQLESiCLNpXWp4EAyr2sTi5dZBphFoLYBzQ8v6CUd/20170807-nginx-status.png","https://fureweb-com.github.io/assets/img/posts/20170807-set-host-ip.png","https://fureweb-com.github.io/assets/img/posts/20170807-certbot-process.png","https://fureweb-com.github.io/assets/img/posts/20170807-ssl-connection.png"],"links":["https://fureweb-com.github.io/blog/2017/08/07/applying-free-ssl-to-your-ubuntu-server-using-nginx-and-let'sencrypt-from-scratch.html","http://www.mingw.org/","https://www.chiark.greenend.org.uk/~sgtatham/putty/latest.html","//iwinv.kr","https://ssltest.fureweb.com"],"app":"steemit/0.1","format":"markdown"}
parent author
parent permlinkssl
permlinknginx-ssl
title우분투에서 nginx 설치부터 무료 SSL 적용까지
Transaction InfoBlock #20085058/Trx 04d0e2ab14e330bd85db871334f3547670e5b98c
View Raw JSON Data
{
  "block": 20085058,
  "op": [
    "comment",
    {
      "author": "fureweb",
      "body": "# 들어가기 전에\n---\n1. 아직 아래 link들에 대해 새창 열기 기능이 steemit에서 지원되지 않는 것 같습니다. 혹시라도 아래에 등장하는 링크를 클릭하시려면 우클릭 후 새창에서 열어 확인해 주세요! \n2. 또한 syntax highlighting이 제대로 지원되지 않는 것 같아서, 혹시라도 보기 불편하신 점이 있다면 아래의 링크를 통해 원본 게시글을 확인하실 수도 있습니다.\n[https://fureweb-com.github.io/blog/2017/08/07/applying-free-ssl-to-your-ubuntu-server-using-nginx-and-let'sencrypt-from-scratch.html](https://fureweb-com.github.io/blog/2017/08/07/applying-free-ssl-to-your-ubuntu-server-using-nginx-and-let'sencrypt-from-scratch.html)\n\n# 개요\n---\n\n본 튜토리얼은 다음의 순서대로 진행됩니다.\n\n- 우분투 VPS 생성\n- nginx 설치 및 설정\n- 도메인 Host IP 설정 및 확인\n- Certbot 설치 및 설정\n- 최종 확인\n- 마치며\n\nwindows 환경에서 아래 예제를 실행하셔야 하는 분들은 [mingw](http://www.mingw.org/), [putty](https://www.chiark.greenend.org.uk/~sgtatham/putty/latest.html), windows 10 bash 등을 통해 bash shell을 사용하실 수 있습니다. 본 포스트의 내용은 로컬머신에서 bash shell을 사용할 수 있음을 전제하여 작성했습니다.  \n\n또한 vi를 사용할 수 있음을 전제하였으나, vi 사용이 어려우신 경우 nano에 대한 사용 방법을 검색하신 뒤 예제를 따라하시는 것을 추천드립니다. 그런 경우 아래에 표시한 vi 명령을 nano 명령으로 대신하시기 바랍니다.\n\n# 우분투 VPS 생성\n---\n\n자신이 사용할 수 있는 클라우드 서비스 내 VPS를 Ubuntu 16.04 LTS 버전으로 생성합니다. 저는 개인적으로 제가 알고있는 한 가장 간단하고 저렴하게 VPS를 생성할 수 있는 [iwinv.kr 클라우드 서비스](//iwinv.kr)를 이용하여 VPS를 생성하도록 하겠습니다.\n\n아래 예제에서는 Ubuntu 16.04 LTS(32bit) 버전으로 VPS를 생성하여 예제를 진행하게 됩니다. 편의상 root 계정으로 아래 예제를 수행하겠습니다.\n\n방화벽 설정과 관련된 부분은 이 포스팅의 주제를 벗어나므로, 가능하다면 VPS 생성 시 방화벽은 사용하지 않음으로 설정하셔서 예제를 실습하시기를 희망합니다.\n\n# nginx 설치 및 설정\n---\n\nssh 클라이언트를 이용하여 방금 막 생성한 VPS로 접속합니다. 접속 후 다음의 명령을 차례대로 실행하여 nginx를 서버에 설치한 뒤, 상태를 확인합니다.  \n\n```bash\n$ ssh root@your-vps-ip\n# 로그인 완료 후 아래 명령을 실행합니다.\n$ apt-get update\n$ apt-get install nginx\n```\n\n설치 후 nginx 실행 상태를 다음과 같이 확인할 수 있습니다.\n\n```bash\n$ service nginx status\n```\n  \n![nginx 설치 후 상태 확인](https://steemitimages.com/DQmT5UFQLESiCLNpXWp4EAyr2sTi5dZBphFoLYBzQ8v6CUd/20170807-nginx-status.png)\n  \n만약 현재 상태가 inactive라면, 다음의 명령을 통해 nginx 프로세스를 실행시킵니다.\n```bash\n$ service nginx start\n```\n  \n설치가 완료된 후 브라우저를 통해 서버의 IP를 입력하여 페이지를 요청하면 welcome to nginx 페이지를 확인할 수 있습니다. 만약 welcome 페이지를 볼수 없다면 방화벽 설정 문제일 가능성이 있습니다. 방화벽과 관련된 부분은 클라우드 서비스 업체마다 설정하는 방법이 다를 수 있으니, 사용하시는 업체의 방화벽 설정 사용 설명을 통해 http 요청을 위한 80번 포트 및 https 요청을 위한 443 포트를 열어둘 수 있도록 합니다.\n\n보유하고 있는 도메인을 현재 VPS로 연결시키기 전, 해당 도메인을 통해 본 서버로 http 요청을 해 오는 경우에 대해 처리할 수 있도록 다음과 같이 nginx 설정을 수행합니다.\n\n```bash\n# 다음의 경로로 이동하여 ssltest.fureweb.com 도메인 요청에 대한 설정파일을 생성합니다.\n# 아래 경로에 등록된 conf 확장자를 가진 모든 파일이 nginx.conf파일에 의해 include 되며, \n# nginx가 실행될 때 본 디렉토리 내 파일들이 해석되게 됩니다.\n$ cd /etc/nginx/conf.d\n\n# 원하는 도메인 명으로 설정 파일을 하나 생성합니다.\n$ vi ssltest.fureweb.com.conf\n```\n  \n아래의 내용을 ssltest.fureweb.com.conf 파일에 입력합니다.\n```bash\nserver {\n  listen 80;\n  server_name ssltest.fureweb.com;\n}\n```\n\n필요한 설정 파일을 생성하였다면, 다음의 명령을 통해 설정에 오타 등의 오류는 없는지 확인한 뒤 설정을 적용합니다.\n```bash\n# 설정 파일들에 오류가 없는지 확인한 뒤\n$ nginx -t\nnginx: the configuration file /etc/nginx/nginx.conf syntax is ok\nnginx: configuration file /etc/nginx/nginx.conf test is successful\n# 오류가 없다면 설정 파일 내용을 적용합니다.\n$ nginx -s reload\n```\n\n현재 VPS는 ssltest.fureweb.com에 대한 http 요청을 처리할 수 있는 상태가 되었습니다. 이제 자신이 가지고 있는 도메인 관리업체의 웹사이트에 로그인하여 해당 도메인에 대한 http 요청이 새로 만든 VPS로 전달될 수 있도록 별도의 설정을 진행해 보겠습니다.\n\n\n# 도메인 Host IP 설정 및 확인\n---\n\n본인이 보유하고있는 도메인을 관리하는 업체 사이트에 로그인하여, 자신이 보유한 도메인(또는 서브도메인)에 대한 Host IP를 설정합니다. \n\n예시로, 제가 보유하고 있는 ssltest.fureweb.com 이라는 서브도메인에 대한 http 요청이 방금 만든 VPS 서버로 연결되도록 설정을 추가하겠습니다. 도메인 등록 대행업체마다 설정하는 방법은 다를 수 있으니, 아래 사진을 참고하셔서 비슷한 메뉴에서 설정을 처리해주세요. 일반적으로 DNS 관리 메뉴의 하위 메뉴에서 설정하실 수 있습니다.\n\n![DNS 관리 메뉴 내 host ip 설정](https://fureweb-com.github.io/assets/img/posts/20170807-set-host-ip.png)\n\n만약 이전에 해당 도메인으로의 연결을 한 적이 있다면, 로컬 PC의 DNS캐시를 삭제해야합니다. 없다면 무시하셔도 됩니다.\n```bash\n# OSX 10.10.4 이상인 경우\n$ killall -HUP mDNSResponder\n\n# Windows 10을 사용하는 경우 - powershell 또는 cmd에서\nipconfig /flushdns\n\n# 죄송하지만 이 외에는 검색해 주세요 -_-;;\n```\n\n브라우저가 크롬이라면, 주소표시줄에 다음의 경로를 복사&붙여넣기하여 조회되는 화면에서 `Clear Host Cache` 버튼을 클릭하여 캐시를 삭제하세요.  \n```url\nchrome://net-internals/#dns\n```\n\n모든 설정에 문제가 없다면, 이제 웹 브라우저를 통해 내가 가지고 있는 도메인에 대한 연결 요청이 방금 만든 VPS로 전달되게 됩니다. 단, 도메인 관리 업체마다 해당 적용값이 얼마나 빨리 반영되는지는 차이가 있을 수 있으므로, 충분한 시간을 두고 확인을 진행해 주세요. 통상 1~2분 내에는 적용되는 걸로 알고 있으나, 다른 업체는 어떤지 사용해보지 않아서 잘 모르겠네요. ^^;\n\n# Certbot 설치 및 설정\n---\n\n먼저 certbot을 설치합니다.\n```bash\n$ add-apt-repository ppa:certbot/certbot\n```\n<br>\n해당 저장소에 담긴 패키지 정보를 확인할 수 있도록 다음과 같이 업데이트를 수행합니다.\n```bash\n$ apt-get update\n```\n<br>\n`apt-get`을 이용하여 Certbot을 설치합니다.\n```bash\n$ apt-get install python-certbot-nginx\n```\n<br>\n설치된 certbot을 이용하여 ssltest.fureweb.com 도메인에 대한 SSL 인증서만 발급받도록 합니다.\n\n```bash\n$ certbot certonly --nginx -d ssltest.fureweb.com\n# 위 명령을 실행하면 해당 도메인을 관리하는 사람의 이메일 주소를 입력하라고 나옵니다. 입력해 주세요.\n# 만료일에 대한 정보를 보내줍니다.\n# 약관에는 동의(A)하셔야 하며,\n# EFF 재단과의 이메일을 공유할지 여부를 묻는 부분에 대해서는 원하시는대로 진행하시면 됩니다.\n```\n<br>\n아래와 같은 메시지들이 출력됩니다.\n![Certbot 설정 과정](https://fureweb-com.github.io/assets/img/posts/20170807-certbot-process.png)\n\n위 명령을 수행하고 나면, 아래 경로에 총 5개의 파일이 생성되어 있음을 확인할 수 있습니다. (실제로는 /etc/letsencrypt/archive/도메인명 디렉토리 내 파일에 대한 심볼릭 링크 입니다.)\n```bash\n$ ls -al /etc/letsencrypt/live/ssltest.fureweb.com\ntotal 12\ndrwxr-xr-x 2 root root 4096 Aug  7 17:03 ./\ndrwx------ 4 root root 4096 Aug  7 16:56 ../\nlrwxrwxrwx 1 root root   43 Aug  7 17:03 cert.pem -> ../../archive/ssltest.fureweb.com/cert1.pem\nlrwxrwxrwx 1 root root   44 Aug  7 17:03 chain.pem -> ../../archive/ssltest.fureweb.com/chain1.pem\nlrwxrwxrwx 1 root root   48 Aug  7 17:03 fullchain.pem -> ../../archive/ssltest.fureweb.com/fullchain1.pem\nlrwxrwxrwx 1 root root   46 Aug  7 17:03 privkey.pem -> ../../archive/ssltest.fureweb.com/privkey1.pem\n-rw-r--r-- 1 root root  543 Aug  7 17:03 README\n```\n<br>\n이제 ssltest.fureweb.com 이라는 도메인에 대한 ssl 요청을 처리하기위해 필요한 인증서가 준비된 상태가 되었습니다. nginx가 이 인증서를 통해 https 요청을 처리할 수 있도록, 아까 설정했던 conf 파일을 아래와 같이 수정해 보겠습니다.  \n\n```bash\n# 아래 명령어로 기존 설정파일 편집\n$ vi /etc/nginx/conf.d/ssltest.fureweb.com.conf\n\n# 다음과 같은 형태가 되어야합니다.\nserver {\n    # http://ssltest.fureweb.com 요청에 대해\n    # https://ssltest.fureweb.com 으로 리다이렉트 처리합니다. \n    listen 80;\n    server_name ssltest.fureweb.com;\n    return 301 https://ssltest.fureweb.com;\n}\n\nserver {\n    # https://ssltest.fureweb.com 으로의 요청을 리스닝합니다.\n    listen 443;\n    server_name ssltest.fureweb.com;\n\n    ssl on;\n    ssl_certificate /etc/letsencrypt/live/ssltest.fureweb.com/fullchain.pem;\n    ssl_certificate_key /etc/letsencrypt/live/ssltest.fureweb.com/privkey.pem;\n\n    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;\n    ssl_ciphers HIGH:!aNULL:!MD5;\n\n    # 예제에서는 이 외에 별도 설정을 추가하지 않고, SSL 요청이 정상적으로 처리되는지만 확인합니다.\n    # 일반적으로 아래에는 현재 도메인과 연결된 document_root 등에 대한 설정 기술하거나\n    # proxy 설정을 통해 동적 처리가 가능한 다른 WAS와 연동하여 응답을 핸들링합니다.\n}\n\n```\n<br>\n위 설정을 저장한 뒤, conf 파일에 오타는 없는지 확인하고 문제가 없다면 설정 내용을 적용시킵니다.\n\n```bash\n# 설정 파일들에 오류가 없는지 확인한 뒤\n$ nginx -t\nnginx: the configuration file /etc/nginx/nginx.conf syntax is ok\nnginx: configuration file /etc/nginx/nginx.conf test is successful\n# 오류가 없다면 설정 파일 내용을 적용합니다.\n$ nginx -s reload\n```\n<br>\n\n# 최종 확인\n---\n\n브라우저의 주소창에 https://ssltest.fureweb.com를 입력하여 연결이 제대로 이뤄지는지 확인합니다. 브라우저 캐시로 인해 https로 리다이렉트 처리가 되지 않은 페이지를 보여줄 수 있으니, 크롬 기준으로 강력 새로고침을 실행시켜주세요.\n\n브라우저 주소표시줄 좌측에 자물쇠가 활성화 된 모습을 확인하실 수 있게 됩니다.  \n~~주소가 ssltest2.fureweb.com인건 무시해주세요... -_-;~~\n\n![SSL 적용 완료](https://fureweb-com.github.io/assets/img/posts/20170807-ssl-connection.png)\n\n\n# 마치며\n---\n\n우분투 서버를 생성하는 것 부터 Nginx 설치 및 설정, 그리고 SSL 적용하기까지 모든 과정에 대해 확인해 보았습니다. 혹시라도 본 포스트를 보고 막히는 부분이 있거나 설명이 부족한 부분이 있다면 언제든지 댓글이나 질문 부탁 드리겠습니다.  \n\n읽어주셔서 감사합니다!",
      "json_metadata": "{\"tags\":[\"nginx\",\"ubuntu\",\"letsencrypt\",\"vps\",\"ssl\"],\"image\":[\"https://steemitimages.com/DQmT5UFQLESiCLNpXWp4EAyr2sTi5dZBphFoLYBzQ8v6CUd/20170807-nginx-status.png\",\"https://fureweb-com.github.io/assets/img/posts/20170807-set-host-ip.png\",\"https://fureweb-com.github.io/assets/img/posts/20170807-certbot-process.png\",\"https://fureweb-com.github.io/assets/img/posts/20170807-ssl-connection.png\"],\"links\":[\"https://fureweb-com.github.io/blog/2017/08/07/applying-free-ssl-to-your-ubuntu-server-using-nginx-and-let'sencrypt-from-scratch.html\",\"http://www.mingw.org/\",\"https://www.chiark.greenend.org.uk/~sgtatham/putty/latest.html\",\"//iwinv.kr\",\"https://ssltest.fureweb.com\"],\"app\":\"steemit/0.1\",\"format\":\"markdown\"}",
      "parent_author": "",
      "parent_permlink": "ssl",
      "permlink": "nginx-ssl",
      "title": "우분투에서 nginx 설치부터 무료 SSL 적용까지"
    }
  ],
  "op_in_trx": 0,
  "timestamp": "2018-02-22T06:11:27",
  "trx_id": "04d0e2ab14e330bd85db871334f3547670e5b98c",
  "trx_in_block": 20,
  "virtual_op": 0
}
2018/02/22 06:10:54
authorfureweb
body아 네 감사합니다!
json metadata{"tags":["ssl"],"app":"steemit/0.1"}
parent authornhj12311
parent permlinkre-fureweb-nginx-ssl-20180222t055917201z
permlinkre-nhj12311-re-fureweb-nginx-ssl-20180222t061051958z
title
Transaction InfoBlock #20085047/Trx 5acd4e6422d03f5204c19e11409d3212d27a2ca9
View Raw JSON Data
{
  "block": 20085047,
  "op": [
    "comment",
    {
      "author": "fureweb",
      "body": "아 네 감사합니다!",
      "json_metadata": "{\"tags\":[\"ssl\"],\"app\":\"steemit/0.1\"}",
      "parent_author": "nhj12311",
      "parent_permlink": "re-fureweb-nginx-ssl-20180222t055917201z",
      "permlink": "re-nhj12311-re-fureweb-nginx-ssl-20180222t061051958z",
      "title": ""
    }
  ],
  "op_in_trx": 0,
  "timestamp": "2018-02-22T06:10:54",
  "trx_id": "5acd4e6422d03f5204c19e11409d3212d27a2ca9",
  "trx_in_block": 25,
  "virtual_op": 0
}
2018/02/22 05:59:21
authornhj12311
bodykr과 #kr-dev 태그를 추천합니다.
json metadata{"tags":["ssl","kr-dev"],"app":"steemit/0.1"}
parent authorfureweb
parent permlinknginx-ssl
permlinkre-fureweb-nginx-ssl-20180222t055917201z
title
Transaction InfoBlock #20084816/Trx 4295b3f90fa51c70ac4b83861164b9e319758963
View Raw JSON Data
{
  "block": 20084816,
  "op": [
    "comment",
    {
      "author": "nhj12311",
      "body": "kr과 #kr-dev 태그를 추천합니다.",
      "json_metadata": "{\"tags\":[\"ssl\",\"kr-dev\"],\"app\":\"steemit/0.1\"}",
      "parent_author": "fureweb",
      "parent_permlink": "nginx-ssl",
      "permlink": "re-fureweb-nginx-ssl-20180222t055917201z",
      "title": ""
    }
  ],
  "op_in_trx": 0,
  "timestamp": "2018-02-22T05:59:21",
  "trx_id": "4295b3f90fa51c70ac4b83861164b9e319758963",
  "trx_in_block": 12,
  "virtual_op": 0
}
nhj12311upvoted (25.00%) @fureweb / nginx-ssl
2018/02/22 05:58:18
authorfureweb
permlinknginx-ssl
voternhj12311
weight2500 (25.00%)
Transaction InfoBlock #20084795/Trx 044c998a5658b1821e4dded31928943ee82ac2fe
View Raw JSON Data
{
  "block": 20084795,
  "op": [
    "vote",
    {
      "author": "fureweb",
      "permlink": "nginx-ssl",
      "voter": "nhj12311",
      "weight": 2500
    }
  ],
  "op_in_trx": 0,
  "timestamp": "2018-02-22T05:58:18",
  "trx_id": "044c998a5658b1821e4dded31928943ee82ac2fe",
  "trx_in_block": 33,
  "virtual_op": 0
}
calebjohnupvoted (100.00%) @fureweb / nginx-ssl
2018/02/22 05:02:09
authorfureweb
permlinknginx-ssl
votercalebjohn
weight10000 (100.00%)
Transaction InfoBlock #20083672/Trx 2ffd1bfec8a0cf682a3e521d731580a5c6cfee46
View Raw JSON Data
{
  "block": 20083672,
  "op": [
    "vote",
    {
      "author": "fureweb",
      "permlink": "nginx-ssl",
      "voter": "calebjohn",
      "weight": 10000
    }
  ],
  "op_in_trx": 0,
  "timestamp": "2018-02-22T05:02:09",
  "trx_id": "2ffd1bfec8a0cf682a3e521d731580a5c6cfee46",
  "trx_in_block": 10,
  "virtual_op": 0
}
hr1upvoted (0.02%) @fureweb / nginx-ssl
2018/02/22 04:56:51
authorfureweb
permlinknginx-ssl
voterhr1
weight2 (0.02%)
Transaction InfoBlock #20083566/Trx cb4346a5fb24660a8950d7b4d99d7064c4300002
View Raw JSON Data
{
  "block": 20083566,
  "op": [
    "vote",
    {
      "author": "fureweb",
      "permlink": "nginx-ssl",
      "voter": "hr1",
      "weight": 2
    }
  ],
  "op_in_trx": 0,
  "timestamp": "2018-02-22T04:56:51",
  "trx_id": "cb4346a5fb24660a8950d7b4d99d7064c4300002",
  "trx_in_block": 34,
  "virtual_op": 0
}
furewebupvoted (100.00%) @fureweb / nginx-ssl
2018/02/22 04:23:51
authorfureweb
permlinknginx-ssl
voterfureweb
weight10000 (100.00%)
Transaction InfoBlock #20082906/Trx f019c4342342d4505dd97bc5f0067324bae69857
View Raw JSON Data
{
  "block": 20082906,
  "op": [
    "vote",
    {
      "author": "fureweb",
      "permlink": "nginx-ssl",
      "voter": "fureweb",
      "weight": 10000
    }
  ],
  "op_in_trx": 0,
  "timestamp": "2018-02-22T04:23:51",
  "trx_id": "f019c4342342d4505dd97bc5f0067324bae69857",
  "trx_in_block": 6,
  "virtual_op": 0
}
furewebpublished a new post: nginx-ssl
2018/02/22 04:23:51
authorfureweb
body# 들어가기 전에 --- 1. 아직 아래 link들에 대해 새창 열기 기능이 steemit에서 지원되지 않는 것 같습니다. 혹시라도 아래에 등장하는 링크를 클릭하시려면 우클릭 후 새창에서 열어 확인해 주세요! 2. 또한 syntax highlighting이 제대로 지원되지 않는 것 같아서, 혹시라도 보기 불편하신 점이 있다면 아래의 링크를 통해 원본 게시글을 확인하실 수도 있습니다. [https://fureweb-com.github.io/blog/2017/08/07/applying-free-ssl-to-your-ubuntu-server-using-nginx-and-let'sencrypt-from-scratch.html](https://fureweb-com.github.io/blog/2017/08/07/applying-free-ssl-to-your-ubuntu-server-using-nginx-and-let'sencrypt-from-scratch.html) # 개요 --- 본 튜토리얼은 다음의 순서대로 진행됩니다. - 우분투 VPS 생성 - nginx 설치 및 설정 - 도메인 Host IP 설정 및 확인 - Certbot 설치 및 설정 - 최종 확인 - 마치며 windows 환경에서 아래 예제를 실행하셔야 하는 분들은 [mingw](http://www.mingw.org/), [putty](https://www.chiark.greenend.org.uk/~sgtatham/putty/latest.html), windows 10 bash 등을 통해 bash shell을 사용하실 수 있습니다. 본 포스트의 내용은 로컬머신에서 bash shell을 사용할 수 있음을 전제하여 작성했습니다. 또한 vi를 사용할 수 있음을 전제하였으나, vi 사용이 어려우신 경우 nano에 대한 사용 방법을 검색하신 뒤 예제를 따라하시는 것을 추천드립니다. 그런 경우 아래에 표시한 vi 명령을 nano 명령으로 대신하시기 바랍니다. # 우분투 VPS 생성 --- 자신이 사용할 수 있는 클라우드 서비스 내 VPS를 Ubuntu 16.04 LTS 버전으로 생성합니다. 저는 개인적으로 제가 알고있는 한 가장 간단하고 저렴하게 VPS를 생성할 수 있는 [iwinv.kr 클라우드 서비스](//iwinv.kr)를 이용하여 VPS를 생성하도록 하겠습니다. 아래 예제에서는 Ubuntu 16.04 LTS(32bit) 버전으로 VPS를 생성하여 예제를 진행하게 됩니다. 편의상 root 계정으로 아래 예제를 수행하겠습니다. 방화벽 설정과 관련된 부분은 이 포스팅의 주제를 벗어나므로, 가능하다면 VPS 생성 시 방화벽은 사용하지 않음으로 설정하셔서 예제를 실습하시기를 희망합니다. # nginx 설치 및 설정 --- ssh 클라이언트를 이용하여 방금 막 생성한 VPS로 접속합니다. 접속 후 다음의 명령을 차례대로 실행하여 nginx를 서버에 설치한 뒤, 상태를 확인합니다. ```bash $ ssh root@your-vps-ip # 로그인 완료 후 아래 명령을 실행합니다. $ apt-get update $ apt-get install nginx ``` 설치 후 nginx 실행 상태를 다음과 같이 확인할 수 있습니다. ```bash $ service nginx status ``` ![nginx 설치 후 상태 확인](https://steemitimages.com/DQmT5UFQLESiCLNpXWp4EAyr2sTi5dZBphFoLYBzQ8v6CUd/20170807-nginx-status.png) 만약 현재 상태가 inactive라면, 다음의 명령을 통해 nginx 프로세스를 실행시킵니다. ```bash $ service nginx start ``` 설치가 완료된 후 브라우저를 통해 서버의 IP를 입력하여 페이지를 요청하면 welcome to nginx 페이지를 확인할 수 있습니다. 만약 welcome 페이지를 볼수 없다면 방화벽 설정 문제일 가능성이 있습니다. 방화벽과 관련된 부분은 클라우드 서비스 업체마다 설정하는 방법이 다를 수 있으니, 사용하시는 업체의 방화벽 설정 사용 설명을 통해 http 요청을 위한 80번 포트 및 https 요청을 위한 443 포트를 열어둘 수 있도록 합니다. 보유하고 있는 도메인을 현재 VPS로 연결시키기 전, 해당 도메인을 통해 본 서버로 http 요청을 해 오는 경우에 대해 처리할 수 있도록 다음과 같이 nginx 설정을 수행합니다. ```bash # 다음의 경로로 이동하여 ssltest.fureweb.com 도메인 요청에 대한 설정파일을 생성합니다. # 아래 경로에 등록된 conf 확장자를 가진 모든 파일이 nginx.conf파일에 의해 include 되며, # nginx가 실행될 때 본 디렉토리 내 파일들이 해석되게 됩니다. $ cd /etc/nginx/conf.d # 원하는 도메인 명으로 설정 파일을 하나 생성합니다. $ vi ssltest.fureweb.com.conf ``` 아래의 내용을 ssltest.fureweb.com.conf 파일에 입력합니다. ```bash server { listen 80; server_name ssltest.fureweb.com; } ``` 필요한 설정 파일을 생성하였다면, 다음의 명령을 통해 설정에 오타 등의 오류는 없는지 확인한 뒤 설정을 적용합니다. ```bash # 설정 파일들에 오류가 없는지 확인한 뒤 $ nginx -t nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful # 오류가 없다면 설정 파일 내용을 적용합니다. $ nginx -s reload ``` 현재 VPS는 ssltest.fureweb.com에 대한 http 요청을 처리할 수 있는 상태가 되었습니다. 이제 자신이 가지고 있는 도메인 관리업체의 웹사이트에 로그인하여 해당 도메인에 대한 http 요청이 새로 만든 VPS로 전달될 수 있도록 별도의 설정을 진행해 보겠습니다. # 도메인 Host IP 설정 및 확인 --- 본인이 보유하고있는 도메인을 관리하는 업체 사이트에 로그인하여, 자신이 보유한 도메인(또는 서브도메인)에 대한 Host IP를 설정합니다. 예시로, 제가 보유하고 있는 ssltest.fureweb.com 이라는 서브도메인에 대한 http 요청이 방금 만든 VPS 서버로 연결되도록 설정을 추가하겠습니다. 도메인 등록 대행업체마다 설정하는 방법은 다를 수 있으니, 아래 사진을 참고하셔서 비슷한 메뉴에서 설정을 처리해주세요. 일반적으로 DNS 관리 메뉴의 하위 메뉴에서 설정하실 수 있습니다. ![DNS 관리 메뉴 내 host ip 설정](https://fureweb-com.github.io/assets/img/posts/20170807-set-host-ip.png) 만약 이전에 해당 도메인으로의 연결을 한 적이 있다면, 로컬 PC의 DNS캐시를 삭제해야합니다. 없다면 무시하셔도 됩니다. ```bash # OSX 10.10.4 이상인 경우 $ killall -HUP mDNSResponder # Windows 10을 사용하는 경우 - powershell 또는 cmd에서 ipconfig /flushdns # 죄송하지만 이 외에는 검색해 주세요 -_-;; ``` 브라우저가 크롬이라면, 주소표시줄에 다음의 경로를 복사&붙여넣기하여 조회되는 화면에서 `Clear Host Cache` 버튼을 클릭하여 캐시를 삭제하세요. ```url chrome://net-internals/#dns ``` 모든 설정에 문제가 없다면, 이제 웹 브라우저를 통해 내가 가지고 있는 도메인에 대한 연결 요청이 방금 만든 VPS로 전달되게 됩니다. 단, 도메인 관리 업체마다 해당 적용값이 얼마나 빨리 반영되는지는 차이가 있을 수 있으므로, 충분한 시간을 두고 확인을 진행해 주세요. 통상 1~2분 내에는 적용되는 걸로 알고 있으나, 다른 업체는 어떤지 사용해보지 않아서 잘 모르겠네요. ^^; # Certbot 설치 및 설정 --- 먼저 certbot을 설치합니다. ```bash $ add-apt-repository ppa:certbot/certbot ``` <br> 해당 저장소에 담긴 패키지 정보를 확인할 수 있도록 다음과 같이 업데이트를 수행합니다. ```bash $ apt-get update ``` <br> `apt-get`을 이용하여 Certbot을 설치합니다. ```bash $ apt-get install python-certbot-nginx ``` <br> 설치된 certbot을 이용하여 ssltest.fureweb.com 도메인에 대한 SSL 인증서만 발급받도록 합니다. ```bash $ certbot certonly --nginx -d ssltest.fureweb.com # 위 명령을 실행하면 해당 도메인을 관리하는 사람의 이메일 주소를 입력하라고 나옵니다. 입력해 주세요. # 만료일에 대한 정보를 보내줍니다. # 약관에는 동의(A)하셔야 하며, # EFF 재단과의 이메일을 공유할지 여부를 묻는 부분에 대해서는 원하시는대로 진행하시면 됩니다. ``` <br> 아래와 같은 메시지들이 출력됩니다. ![Certbot 설정 과정](https://fureweb-com.github.io/assets/img/posts/20170807-certbot-process.png) 위 명령을 수행하고 나면, 아래 경로에 총 5개의 파일이 생성되어 있음을 확인할 수 있습니다. (실제로는 /etc/letsencrypt/archive/도메인명 디렉토리 내 파일에 대한 심볼릭 링크 입니다.) ```bash $ ls -al /etc/letsencrypt/live/ssltest.fureweb.com total 12 drwxr-xr-x 2 root root 4096 Aug 7 17:03 ./ drwx------ 4 root root 4096 Aug 7 16:56 ../ lrwxrwxrwx 1 root root 43 Aug 7 17:03 cert.pem -> ../../archive/ssltest.fureweb.com/cert1.pem lrwxrwxrwx 1 root root 44 Aug 7 17:03 chain.pem -> ../../archive/ssltest.fureweb.com/chain1.pem lrwxrwxrwx 1 root root 48 Aug 7 17:03 fullchain.pem -> ../../archive/ssltest.fureweb.com/fullchain1.pem lrwxrwxrwx 1 root root 46 Aug 7 17:03 privkey.pem -> ../../archive/ssltest.fureweb.com/privkey1.pem -rw-r--r-- 1 root root 543 Aug 7 17:03 README ``` <br> 이제 ssltest.fureweb.com 이라는 도메인에 대한 ssl 요청을 처리하기위해 필요한 인증서가 준비된 상태가 되었습니다. nginx가 이 인증서를 통해 https 요청을 처리할 수 있도록, 아까 설정했던 conf 파일을 아래와 같이 수정해 보겠습니다. ```bash # 아래 명령어로 기존 설정파일 편집 $ vi /etc/nginx/conf.d/ssltest.fureweb.com.conf # 다음과 같은 형태가 되어야합니다. server { # http://ssltest.fureweb.com 요청에 대해 # https://ssltest.fureweb.com 으로 리다이렉트 처리합니다. listen 80; server_name ssltest.fureweb.com; return 301 https://ssltest.fureweb.com; } server { # https://ssltest.fureweb.com 으로의 요청을 리스닝합니다. listen 443; server_name ssltest.fureweb.com; ssl on; ssl_certificate /etc/letsencrypt/live/ssltest.fureweb.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/ssltest.fureweb.com/privkey.pem; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_ciphers HIGH:!aNULL:!MD5; # 예제에서는 이 외에 별도 설정을 추가하지 않고, SSL 요청이 정상적으로 처리되는지만 확인합니다. # 일반적으로 아래에는 현재 도메인과 연결된 document_root 등에 대한 설정 기술하거나 # proxy 설정을 통해 동적 처리가 가능한 다른 WAS와 연동하여 응답을 핸들링합니다. } ``` <br> 위 설정을 저장한 뒤, conf 파일에 오타는 없는지 확인하고 문제가 없다면 설정 내용을 적용시킵니다. ```bash # 설정 파일들에 오류가 없는지 확인한 뒤 $ nginx -t nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful # 오류가 없다면 설정 파일 내용을 적용합니다. $ nginx -s reload ``` <br> # 최종 확인 --- 브라우저의 주소창에 https://ssltest.fureweb.com를 입력하여 연결이 제대로 이뤄지는지 확인합니다. 브라우저 캐시로 인해 https로 리다이렉트 처리가 되지 않은 페이지를 보여줄 수 있으니, 크롬 기준으로 강력 새로고침을 실행시켜주세요. 브라우저 주소표시줄 좌측에 자물쇠가 활성화 된 모습을 확인하실 수 있게 됩니다. ~~주소가 ssltest2.fureweb.com인건 무시해주세요... -_-;~~ ![SSL 적용 완료](https://fureweb-com.github.io/assets/img/posts/20170807-ssl-connection.png) # 마치며 --- 우분투 서버를 생성하는 것 부터 Nginx 설치 및 설정, 그리고 SSL 적용하기까지 모든 과정에 대해 확인해 보았습니다. 혹시라도 본 포스트를 보고 막히는 부분이 있거나 설명이 부족한 부분이 있다면 언제든지 댓글이나 질문 부탁 드리겠습니다. 읽어주셔서 감사합니다!
json metadata{"tags":["ssl","nginx","ubuntu","letsencrypt","vps"],"image":["https://steemitimages.com/DQmT5UFQLESiCLNpXWp4EAyr2sTi5dZBphFoLYBzQ8v6CUd/20170807-nginx-status.png","https://fureweb-com.github.io/assets/img/posts/20170807-set-host-ip.png","https://fureweb-com.github.io/assets/img/posts/20170807-certbot-process.png","https://fureweb-com.github.io/assets/img/posts/20170807-ssl-connection.png"],"links":["https://fureweb-com.github.io/blog/2017/08/07/applying-free-ssl-to-your-ubuntu-server-using-nginx-and-let'sencrypt-from-scratch.html","http://www.mingw.org/","https://www.chiark.greenend.org.uk/~sgtatham/putty/latest.html","//iwinv.kr","https://ssltest.fureweb.com"],"app":"steemit/0.1","format":"markdown"}
parent author
parent permlinkssl
permlinknginx-ssl
title우분투에서 nginx 설치부터 무료 SSL 적용까지
Transaction InfoBlock #20082906/Trx f019c4342342d4505dd97bc5f0067324bae69857
View Raw JSON Data
{
  "block": 20082906,
  "op": [
    "comment",
    {
      "author": "fureweb",
      "body": "# 들어가기 전에\n---\n1. 아직 아래 link들에 대해 새창 열기 기능이 steemit에서 지원되지 않는 것 같습니다. 혹시라도 아래에 등장하는 링크를 클릭하시려면 우클릭 후 새창에서 열어 확인해 주세요! \n2. 또한 syntax highlighting이 제대로 지원되지 않는 것 같아서, 혹시라도 보기 불편하신 점이 있다면 아래의 링크를 통해 원본 게시글을 확인하실 수도 있습니다.\n[https://fureweb-com.github.io/blog/2017/08/07/applying-free-ssl-to-your-ubuntu-server-using-nginx-and-let'sencrypt-from-scratch.html](https://fureweb-com.github.io/blog/2017/08/07/applying-free-ssl-to-your-ubuntu-server-using-nginx-and-let'sencrypt-from-scratch.html)\n\n# 개요\n---\n\n본 튜토리얼은 다음의 순서대로 진행됩니다.\n\n- 우분투 VPS 생성\n- nginx 설치 및 설정\n- 도메인 Host IP 설정 및 확인\n- Certbot 설치 및 설정\n- 최종 확인\n- 마치며\n\nwindows 환경에서 아래 예제를 실행하셔야 하는 분들은 [mingw](http://www.mingw.org/), [putty](https://www.chiark.greenend.org.uk/~sgtatham/putty/latest.html), windows 10 bash 등을 통해 bash shell을 사용하실 수 있습니다. 본 포스트의 내용은 로컬머신에서 bash shell을 사용할 수 있음을 전제하여 작성했습니다.  \n\n또한 vi를 사용할 수 있음을 전제하였으나, vi 사용이 어려우신 경우 nano에 대한 사용 방법을 검색하신 뒤 예제를 따라하시는 것을 추천드립니다. 그런 경우 아래에 표시한 vi 명령을 nano 명령으로 대신하시기 바랍니다.\n\n# 우분투 VPS 생성\n---\n\n자신이 사용할 수 있는 클라우드 서비스 내 VPS를 Ubuntu 16.04 LTS 버전으로 생성합니다. 저는 개인적으로 제가 알고있는 한 가장 간단하고 저렴하게 VPS를 생성할 수 있는 [iwinv.kr 클라우드 서비스](//iwinv.kr)를 이용하여 VPS를 생성하도록 하겠습니다.\n\n아래 예제에서는 Ubuntu 16.04 LTS(32bit) 버전으로 VPS를 생성하여 예제를 진행하게 됩니다. 편의상 root 계정으로 아래 예제를 수행하겠습니다.\n\n방화벽 설정과 관련된 부분은 이 포스팅의 주제를 벗어나므로, 가능하다면 VPS 생성 시 방화벽은 사용하지 않음으로 설정하셔서 예제를 실습하시기를 희망합니다.\n\n# nginx 설치 및 설정\n---\n\nssh 클라이언트를 이용하여 방금 막 생성한 VPS로 접속합니다. 접속 후 다음의 명령을 차례대로 실행하여 nginx를 서버에 설치한 뒤, 상태를 확인합니다.  \n\n```bash\n$ ssh root@your-vps-ip\n# 로그인 완료 후 아래 명령을 실행합니다.\n$ apt-get update\n$ apt-get install nginx\n```\n\n설치 후 nginx 실행 상태를 다음과 같이 확인할 수 있습니다.\n\n```bash\n$ service nginx status\n```\n  \n![nginx 설치 후 상태 확인](https://steemitimages.com/DQmT5UFQLESiCLNpXWp4EAyr2sTi5dZBphFoLYBzQ8v6CUd/20170807-nginx-status.png)\n  \n만약 현재 상태가 inactive라면, 다음의 명령을 통해 nginx 프로세스를 실행시킵니다.\n```bash\n$ service nginx start\n```\n  \n설치가 완료된 후 브라우저를 통해 서버의 IP를 입력하여 페이지를 요청하면 welcome to nginx 페이지를 확인할 수 있습니다. 만약 welcome 페이지를 볼수 없다면 방화벽 설정 문제일 가능성이 있습니다. 방화벽과 관련된 부분은 클라우드 서비스 업체마다 설정하는 방법이 다를 수 있으니, 사용하시는 업체의 방화벽 설정 사용 설명을 통해 http 요청을 위한 80번 포트 및 https 요청을 위한 443 포트를 열어둘 수 있도록 합니다.\n\n보유하고 있는 도메인을 현재 VPS로 연결시키기 전, 해당 도메인을 통해 본 서버로 http 요청을 해 오는 경우에 대해 처리할 수 있도록 다음과 같이 nginx 설정을 수행합니다.\n\n```bash\n# 다음의 경로로 이동하여 ssltest.fureweb.com 도메인 요청에 대한 설정파일을 생성합니다.\n# 아래 경로에 등록된 conf 확장자를 가진 모든 파일이 nginx.conf파일에 의해 include 되며, \n# nginx가 실행될 때 본 디렉토리 내 파일들이 해석되게 됩니다.\n$ cd /etc/nginx/conf.d\n\n# 원하는 도메인 명으로 설정 파일을 하나 생성합니다.\n$ vi ssltest.fureweb.com.conf\n```\n  \n아래의 내용을 ssltest.fureweb.com.conf 파일에 입력합니다.\n```bash\nserver {\n  listen 80;\n  server_name ssltest.fureweb.com;\n}\n```\n\n필요한 설정 파일을 생성하였다면, 다음의 명령을 통해 설정에 오타 등의 오류는 없는지 확인한 뒤 설정을 적용합니다.\n```bash\n# 설정 파일들에 오류가 없는지 확인한 뒤\n$ nginx -t\nnginx: the configuration file /etc/nginx/nginx.conf syntax is ok\nnginx: configuration file /etc/nginx/nginx.conf test is successful\n# 오류가 없다면 설정 파일 내용을 적용합니다.\n$ nginx -s reload\n```\n\n현재 VPS는 ssltest.fureweb.com에 대한 http 요청을 처리할 수 있는 상태가 되었습니다. 이제 자신이 가지고 있는 도메인 관리업체의 웹사이트에 로그인하여 해당 도메인에 대한 http 요청이 새로 만든 VPS로 전달될 수 있도록 별도의 설정을 진행해 보겠습니다.\n\n\n# 도메인 Host IP 설정 및 확인\n---\n\n본인이 보유하고있는 도메인을 관리하는 업체 사이트에 로그인하여, 자신이 보유한 도메인(또는 서브도메인)에 대한 Host IP를 설정합니다. \n\n예시로, 제가 보유하고 있는 ssltest.fureweb.com 이라는 서브도메인에 대한 http 요청이 방금 만든 VPS 서버로 연결되도록 설정을 추가하겠습니다. 도메인 등록 대행업체마다 설정하는 방법은 다를 수 있으니, 아래 사진을 참고하셔서 비슷한 메뉴에서 설정을 처리해주세요. 일반적으로 DNS 관리 메뉴의 하위 메뉴에서 설정하실 수 있습니다.\n\n![DNS 관리 메뉴 내 host ip 설정](https://fureweb-com.github.io/assets/img/posts/20170807-set-host-ip.png)\n\n만약 이전에 해당 도메인으로의 연결을 한 적이 있다면, 로컬 PC의 DNS캐시를 삭제해야합니다. 없다면 무시하셔도 됩니다.\n```bash\n# OSX 10.10.4 이상인 경우\n$ killall -HUP mDNSResponder\n\n# Windows 10을 사용하는 경우 - powershell 또는 cmd에서\nipconfig /flushdns\n\n# 죄송하지만 이 외에는 검색해 주세요 -_-;;\n```\n\n브라우저가 크롬이라면, 주소표시줄에 다음의 경로를 복사&붙여넣기하여 조회되는 화면에서 `Clear Host Cache` 버튼을 클릭하여 캐시를 삭제하세요.  \n```url\nchrome://net-internals/#dns\n```\n\n모든 설정에 문제가 없다면, 이제 웹 브라우저를 통해 내가 가지고 있는 도메인에 대한 연결 요청이 방금 만든 VPS로 전달되게 됩니다. 단, 도메인 관리 업체마다 해당 적용값이 얼마나 빨리 반영되는지는 차이가 있을 수 있으므로, 충분한 시간을 두고 확인을 진행해 주세요. 통상 1~2분 내에는 적용되는 걸로 알고 있으나, 다른 업체는 어떤지 사용해보지 않아서 잘 모르겠네요. ^^;\n\n# Certbot 설치 및 설정\n---\n\n먼저 certbot을 설치합니다.\n```bash\n$ add-apt-repository ppa:certbot/certbot\n```\n<br>\n해당 저장소에 담긴 패키지 정보를 확인할 수 있도록 다음과 같이 업데이트를 수행합니다.\n```bash\n$ apt-get update\n```\n<br>\n`apt-get`을 이용하여 Certbot을 설치합니다.\n```bash\n$ apt-get install python-certbot-nginx\n```\n<br>\n설치된 certbot을 이용하여 ssltest.fureweb.com 도메인에 대한 SSL 인증서만 발급받도록 합니다.\n\n```bash\n$ certbot certonly --nginx -d ssltest.fureweb.com\n# 위 명령을 실행하면 해당 도메인을 관리하는 사람의 이메일 주소를 입력하라고 나옵니다. 입력해 주세요.\n# 만료일에 대한 정보를 보내줍니다.\n# 약관에는 동의(A)하셔야 하며,\n# EFF 재단과의 이메일을 공유할지 여부를 묻는 부분에 대해서는 원하시는대로 진행하시면 됩니다.\n```\n<br>\n아래와 같은 메시지들이 출력됩니다.\n![Certbot 설정 과정](https://fureweb-com.github.io/assets/img/posts/20170807-certbot-process.png)\n\n위 명령을 수행하고 나면, 아래 경로에 총 5개의 파일이 생성되어 있음을 확인할 수 있습니다. (실제로는 /etc/letsencrypt/archive/도메인명 디렉토리 내 파일에 대한 심볼릭 링크 입니다.)\n```bash\n$ ls -al /etc/letsencrypt/live/ssltest.fureweb.com\ntotal 12\ndrwxr-xr-x 2 root root 4096 Aug  7 17:03 ./\ndrwx------ 4 root root 4096 Aug  7 16:56 ../\nlrwxrwxrwx 1 root root   43 Aug  7 17:03 cert.pem -> ../../archive/ssltest.fureweb.com/cert1.pem\nlrwxrwxrwx 1 root root   44 Aug  7 17:03 chain.pem -> ../../archive/ssltest.fureweb.com/chain1.pem\nlrwxrwxrwx 1 root root   48 Aug  7 17:03 fullchain.pem -> ../../archive/ssltest.fureweb.com/fullchain1.pem\nlrwxrwxrwx 1 root root   46 Aug  7 17:03 privkey.pem -> ../../archive/ssltest.fureweb.com/privkey1.pem\n-rw-r--r-- 1 root root  543 Aug  7 17:03 README\n```\n<br>\n이제 ssltest.fureweb.com 이라는 도메인에 대한 ssl 요청을 처리하기위해 필요한 인증서가 준비된 상태가 되었습니다. nginx가 이 인증서를 통해 https 요청을 처리할 수 있도록, 아까 설정했던 conf 파일을 아래와 같이 수정해 보겠습니다.  \n\n```bash\n# 아래 명령어로 기존 설정파일 편집\n$ vi /etc/nginx/conf.d/ssltest.fureweb.com.conf\n\n# 다음과 같은 형태가 되어야합니다.\nserver {\n    # http://ssltest.fureweb.com 요청에 대해\n    # https://ssltest.fureweb.com 으로 리다이렉트 처리합니다. \n    listen 80;\n    server_name ssltest.fureweb.com;\n    return 301 https://ssltest.fureweb.com;\n}\n\nserver {\n    # https://ssltest.fureweb.com 으로의 요청을 리스닝합니다.\n    listen 443;\n    server_name ssltest.fureweb.com;\n\n    ssl on;\n    ssl_certificate /etc/letsencrypt/live/ssltest.fureweb.com/fullchain.pem;\n    ssl_certificate_key /etc/letsencrypt/live/ssltest.fureweb.com/privkey.pem;\n\n    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;\n    ssl_ciphers HIGH:!aNULL:!MD5;\n\n    # 예제에서는 이 외에 별도 설정을 추가하지 않고, SSL 요청이 정상적으로 처리되는지만 확인합니다.\n    # 일반적으로 아래에는 현재 도메인과 연결된 document_root 등에 대한 설정 기술하거나\n    # proxy 설정을 통해 동적 처리가 가능한 다른 WAS와 연동하여 응답을 핸들링합니다.\n}\n\n```\n<br>\n위 설정을 저장한 뒤, conf 파일에 오타는 없는지 확인하고 문제가 없다면 설정 내용을 적용시킵니다.\n\n```bash\n# 설정 파일들에 오류가 없는지 확인한 뒤\n$ nginx -t\nnginx: the configuration file /etc/nginx/nginx.conf syntax is ok\nnginx: configuration file /etc/nginx/nginx.conf test is successful\n# 오류가 없다면 설정 파일 내용을 적용합니다.\n$ nginx -s reload\n```\n<br>\n\n# 최종 확인\n---\n\n브라우저의 주소창에 https://ssltest.fureweb.com를 입력하여 연결이 제대로 이뤄지는지 확인합니다. 브라우저 캐시로 인해 https로 리다이렉트 처리가 되지 않은 페이지를 보여줄 수 있으니, 크롬 기준으로 강력 새로고침을 실행시켜주세요.\n\n브라우저 주소표시줄 좌측에 자물쇠가 활성화 된 모습을 확인하실 수 있게 됩니다.  \n~~주소가 ssltest2.fureweb.com인건 무시해주세요... -_-;~~\n\n![SSL 적용 완료](https://fureweb-com.github.io/assets/img/posts/20170807-ssl-connection.png)\n\n\n# 마치며\n---\n\n우분투 서버를 생성하는 것 부터 Nginx 설치 및 설정, 그리고 SSL 적용하기까지 모든 과정에 대해 확인해 보았습니다. 혹시라도 본 포스트를 보고 막히는 부분이 있거나 설명이 부족한 부분이 있다면 언제든지 댓글이나 질문 부탁 드리겠습니다.  \n\n읽어주셔서 감사합니다!",
      "json_metadata": "{\"tags\":[\"ssl\",\"nginx\",\"ubuntu\",\"letsencrypt\",\"vps\"],\"image\":[\"https://steemitimages.com/DQmT5UFQLESiCLNpXWp4EAyr2sTi5dZBphFoLYBzQ8v6CUd/20170807-nginx-status.png\",\"https://fureweb-com.github.io/assets/img/posts/20170807-set-host-ip.png\",\"https://fureweb-com.github.io/assets/img/posts/20170807-certbot-process.png\",\"https://fureweb-com.github.io/assets/img/posts/20170807-ssl-connection.png\"],\"links\":[\"https://fureweb-com.github.io/blog/2017/08/07/applying-free-ssl-to-your-ubuntu-server-using-nginx-and-let'sencrypt-from-scratch.html\",\"http://www.mingw.org/\",\"https://www.chiark.greenend.org.uk/~sgtatham/putty/latest.html\",\"//iwinv.kr\",\"https://ssltest.fureweb.com\"],\"app\":\"steemit/0.1\",\"format\":\"markdown\"}",
      "parent_author": "",
      "parent_permlink": "ssl",
      "permlink": "nginx-ssl",
      "title": "우분투에서 nginx 설치부터 무료 SSL 적용까지"
    }
  ],
  "op_in_trx": 0,
  "timestamp": "2018-02-22T04:23:51",
  "trx_id": "f019c4342342d4505dd97bc5f0067324bae69857",
  "trx_in_block": 6,
  "virtual_op": 0
}
2018/02/22 03:30:09
authorfureweb
bodyIs this issue still haven't solved yet?
json metadata{"tags":["steemit"],"app":"steemit/0.1"}
parent authorslickwilly
parent permlinksteemit-feature-request-or-links-to-open-in-a-new-tab
permlinkre-slickwilly-steemit-feature-request-or-links-to-open-in-a-new-tab-20180222t033008394z
title
Transaction InfoBlock #20081832/Trx 60428c1dbd02b7e695728e7acbe2f6926e1557b2
View Raw JSON Data
{
  "block": 20081832,
  "op": [
    "comment",
    {
      "author": "fureweb",
      "body": "Is this issue still haven't solved yet?",
      "json_metadata": "{\"tags\":[\"steemit\"],\"app\":\"steemit/0.1\"}",
      "parent_author": "slickwilly",
      "parent_permlink": "steemit-feature-request-or-links-to-open-in-a-new-tab",
      "permlink": "re-slickwilly-steemit-feature-request-or-links-to-open-in-a-new-tab-20180222t033008394z",
      "title": ""
    }
  ],
  "op_in_trx": 0,
  "timestamp": "2018-02-22T03:30:09",
  "trx_id": "60428c1dbd02b7e695728e7acbe2f6926e1557b2",
  "trx_in_block": 12,
  "virtual_op": 0
}
furewebsent 19.208 SBD to @myupbit- "3711e58f-207c-4cbb-a7ad-4da5641e2dfd"
2018/02/20 23:11:24
amount19.208 SBD
fromfureweb
memo3711e58f-207c-4cbb-a7ad-4da5641e2dfd
tomyupbit
Transaction InfoBlock #20047865/Trx 05d2d823b8f4ee2a18388ba2500cd31baf70c4a5
View Raw JSON Data
{
  "block": 20047865,
  "op": [
    "transfer",
    {
      "amount": "19.208 SBD",
      "from": "fureweb",
      "memo": "3711e58f-207c-4cbb-a7ad-4da5641e2dfd",
      "to": "myupbit"
    }
  ],
  "op_in_trx": 0,
  "timestamp": "2018-02-20T23:11:24",
  "trx_id": "05d2d823b8f4ee2a18388ba2500cd31baf70c4a5",
  "trx_in_block": 19,
  "virtual_op": 0
}
2018/02/20 23:09:30
idfollow
json["follow",{"follower":"fureweb","following":"myupbit","what":["blog"]}]
required auths[]
required posting auths["fureweb"]
Transaction InfoBlock #20047827/Trx ade81947d2726162efaf69780a4d0298aa584070
View Raw JSON Data
{
  "block": 20047827,
  "op": [
    "custom_json",
    {
      "id": "follow",
      "json": "[\"follow\",{\"follower\":\"fureweb\",\"following\":\"myupbit\",\"what\":[\"blog\"]}]",
      "required_auths": [],
      "required_posting_auths": [
        "fureweb"
      ]
    }
  ],
  "op_in_trx": 0,
  "timestamp": "2018-02-20T23:09:30",
  "trx_id": "ade81947d2726162efaf69780a4d0298aa584070",
  "trx_in_block": 55,
  "virtual_op": 0
}
steemdelegated 14.235 SP to @fureweb
2018/01/29 11:12:03
delegateefureweb
delegatorsteem
vesting shares23153.235632 VESTS
Transaction InfoBlock #19400698/Trx 96eb1501e658061ede4746b5a06566f3040cd335
View Raw JSON Data
{
  "block": 19400698,
  "op": [
    "delegate_vesting_shares",
    {
      "delegatee": "fureweb",
      "delegator": "steem",
      "vesting_shares": "23153.235632 VESTS"
    }
  ],
  "op_in_trx": 0,
  "timestamp": "2018-01-29T11:12:03",
  "trx_id": "96eb1501e658061ede4746b5a06566f3040cd335",
  "trx_in_block": 23,
  "virtual_op": 0
}
furewebclaimed reward balance: 19.208 SBD, 4.007 SP
2018/01/29 09:09:09
accountfureweb
reward sbd19.208 SBD
reward steem0.000 STEEM
reward vests6517.549011 VESTS
Transaction InfoBlock #19398240/Trx fa3b38b2261221026406d6c6dd793e8a605a117c
View Raw JSON Data
{
  "block": 19398240,
  "op": [
    "claim_reward_balance",
    {
      "account": "fureweb",
      "reward_sbd": "19.208 SBD",
      "reward_steem": "0.000 STEEM",
      "reward_vests": "6517.549011 VESTS"
    }
  ],
  "op_in_trx": 0,
  "timestamp": "2018-01-29T09:09:09",
  "trx_id": "fa3b38b2261221026406d6c6dd793e8a605a117c",
  "trx_in_block": 3,
  "virtual_op": 0
}
furewebreceived 19.208 SBD, 4.007 SP author reward for @fureweb / eos-github-repository
2018/01/29 04:32:45
authorfureweb
permlinkeos-github-repository
sbd payout19.208 SBD
steem payout0.000 STEEM
vesting payout6517.549011 VESTS
Transaction InfoBlock #19392714/Virtual Operation #29
View Raw JSON Data
{
  "block": 19392714,
  "op": [
    "author_reward",
    {
      "author": "fureweb",
      "permlink": "eos-github-repository",
      "sbd_payout": "19.208 SBD",
      "steem_payout": "0.000 STEEM",
      "vesting_payout": "6517.549011 VESTS"
    }
  ],
  "op_in_trx": 0,
  "timestamp": "2018-01-29T04:32:45",
  "trx_id": "0000000000000000000000000000000000000000",
  "trx_in_block": 4294967295,
  "virtual_op": 29
}
furewebupvoted (100.00%) @wans / the-shanghai-accord
2018/01/26 08:08:57
authorwans
permlinkthe-shanghai-accord
voterfureweb
weight10000 (100.00%)
Transaction InfoBlock #19310689/Trx 257f9c6dcca012d2c6b3c0ec299bef1c277326d9
View Raw JSON Data
{
  "block": 19310689,
  "op": [
    "vote",
    {
      "author": "wans",
      "permlink": "the-shanghai-accord",
      "voter": "fureweb",
      "weight": 10000
    }
  ],
  "op_in_trx": 0,
  "timestamp": "2018-01-26T08:08:57",
  "trx_id": "257f9c6dcca012d2c6b3c0ec299bef1c277326d9",
  "trx_in_block": 7,
  "virtual_op": 0
}
furewebupvoted (100.00%) @polonius79 / steem-2
2018/01/25 10:04:03
authorpolonius79
permlinksteem-2
voterfureweb
weight10000 (100.00%)
Transaction InfoBlock #19284200/Trx 6d8205fc7965737118883fba9ab38399a2a549db
View Raw JSON Data
{
  "block": 19284200,
  "op": [
    "vote",
    {
      "author": "polonius79",
      "permlink": "steem-2",
      "voter": "fureweb",
      "weight": 10000
    }
  ],
  "op_in_trx": 0,
  "timestamp": "2018-01-25T10:04:03",
  "trx_id": "6d8205fc7965737118883fba9ab38399a2a549db",
  "trx_in_block": 37,
  "virtual_op": 0
}
2018/01/24 09:48:54
authorfureweb
bodyThanks for your post.
json metadata{"tags":["eos"],"app":"steemit/0.1"}
parent authorskenan
parent permlinkeos-development-for-beginners-webassembly
permlinkre-skenan-eos-development-for-beginners-webassembly-20180124t094852631z
title
Transaction InfoBlock #19255106/Trx c86aae2b92e8d19c700146d77e85c486b55094e8
View Raw JSON Data
{
  "block": 19255106,
  "op": [
    "comment",
    {
      "author": "fureweb",
      "body": "Thanks for your post.",
      "json_metadata": "{\"tags\":[\"eos\"],\"app\":\"steemit/0.1\"}",
      "parent_author": "skenan",
      "parent_permlink": "eos-development-for-beginners-webassembly",
      "permlink": "re-skenan-eos-development-for-beginners-webassembly-20180124t094852631z",
      "title": ""
    }
  ],
  "op_in_trx": 0,
  "timestamp": "2018-01-24T09:48:54",
  "trx_id": "c86aae2b92e8d19c700146d77e85c486b55094e8",
  "trx_in_block": 28,
  "virtual_op": 0
}
2018/01/24 09:48:30
authorskenan
permlinkeos-development-for-beginners-webassembly
voterfureweb
weight10000 (100.00%)
Transaction InfoBlock #19255098/Trx 26bab71988baf9886dfd974276426a6198d75c6a
View Raw JSON Data
{
  "block": 19255098,
  "op": [
    "vote",
    {
      "author": "skenan",
      "permlink": "eos-development-for-beginners-webassembly",
      "voter": "fureweb",
      "weight": 10000
    }
  ],
  "op_in_trx": 0,
  "timestamp": "2018-01-24T09:48:30",
  "trx_id": "26bab71988baf9886dfd974276426a6198d75c6a",
  "trx_in_block": 22,
  "virtual_op": 0
}
2018/01/23 20:34:45
authorn3r0
permlinkre-eosio-block-one-and-mike-novogratz-s-galaxy-digital-announce-joint-venture-for-new-usd325-million-eos-io-fund-20180123t164933092z
voterfureweb
weight10000 (100.00%)
Transaction InfoBlock #19239231/Trx 6eb6577fdd54844bd278e70c9815a3eb72e2e142
View Raw JSON Data
{
  "block": 19239231,
  "op": [
    "vote",
    {
      "author": "n3r0",
      "permlink": "re-eosio-block-one-and-mike-novogratz-s-galaxy-digital-announce-joint-venture-for-new-usd325-million-eos-io-fund-20180123t164933092z",
      "voter": "fureweb",
      "weight": 10000
    }
  ],
  "op_in_trx": 0,
  "timestamp": "2018-01-23T20:34:45",
  "trx_id": "6eb6577fdd54844bd278e70c9815a3eb72e2e142",
  "trx_in_block": 15,
  "virtual_op": 0
}
furewebpublished a new post: eos-github-repository
2018/01/23 05:20:48
authorfureweb
body여러 기여자들이 있지만, 그 중 상위 9개 계정(code additions기준)에 대해 간단하게 조사를 해 보았습니다. 해당 링크는 https://github.com/EOSIO/eos/graphs/contributors?from=2017-04-02&to=2018-01-20&type=a 입니다. ![addtion_top10.png](https://steemitimages.com/DQmQofZf6k8nvavR2hE6ypELQnhEdnzWq3FZTqbKsuBAzrf/addtion_top10.png) #1 - bytemaster : 아시다시피 대니얼 라리머입니다! #2 - jgiszczak : 현재로서는 소속을 확인할 수 없었습니다. EOS 관련 코어 부분 코드에 많은 기여를 하고 있음만 확인할 수 있었습니다. #3 - nathanhourt : Follow My vote라는 회사의 CTO입니다. 현재 수행중인 비즈니스와는 직접적으로 연관은 없어 보이지만, 아마 EOS 플랫폼 위에서 돌아가는 DApp을 개발중인 것으로 추정될 뿐입니다. #4 - pmesnier : Object Computing(이하 OCI) 회사 소속 프로그래머입니다. #5 - ChristianDunst : 현재로서는 소속을 확인할 수 없었습니다. #6 - heifner : OCI 소속 프로그래머입니다. #7 - elmato : 현재로서는 소속을 확인할 수 없었습니다. 해당 개발자의 리파지토리를 봤을 때, 암호화폐 하드웨어 지갑 관련하여 작업한 커밋 내역들이 있음을 확인하였습니다. #8 - brianjohnson5972 : OCI 소속 프로그래머입니다. #9 - dskvr : 헝가리에서 거주하는 개발자로 확인되며, 소속은 따로 확인할 수 없었습니다. 그 외에 코드 기여 정도를 확인해 보았을 때, 아래 처럼 OCI라는 회사 계정과 연결되어있는 계정들의 커밋 이력을 확인할 수 있습니다. ![included_oci_keywords.png](https://steemitimages.com/DQmetps5FJ4QcUZ8ivhthQvYTSKqZ9vE8Q2zGsz5DnZZoad/included_oci_keywords.png) 이 OCI라는 회사에 대한 정보를 조금 더 확인해 보았습니다. Object Computing이라는 이 회사는 세인트루이스 주에 설립된 'We are software engineers.' 라는 간지나는 슬로건을 내걸고 있는, Software Engineering, IOT, Machine Learning, Blockchain Consulting 네가지 분야에 대한 업무를 수행하고 있는 회사로 확인되었습니다. 이 중 블록체인 컨설팅 메뉴 하단에서 확인할 수 있는 파트너 회사들을 봤을 때, block.one과 eos는 제외하고 ripe.io라는 Transparency in Every Byte of Food 라는 메시지를 슬로건으로 하고 있는 회사를 파트너로 두고 있는, EOS 플랫폼에 큰 기여를 하고 있는 회사로 확인되고 있습니다. ![clients.png](https://steemitimages.com/DQmY7DSES5mBS4Gm9BXmmx6Ar39SdHeb1YA4Fb8PB2jWYDU/clients.png) 이 회사 소속 엔지니어들이 중요한 역할을 하고 있음을 간접적으로 확인할 수 있었습니다.
json metadata{"tags":["eos","kr"],"image":["https://steemitimages.com/DQmQofZf6k8nvavR2hE6ypELQnhEdnzWq3FZTqbKsuBAzrf/addtion_top10.png","https://steemitimages.com/DQmetps5FJ4QcUZ8ivhthQvYTSKqZ9vE8Q2zGsz5DnZZoad/included_oci_keywords.png","https://steemitimages.com/DQmY7DSES5mBS4Gm9BXmmx6Ar39SdHeb1YA4Fb8PB2jWYDU/clients.png"],"links":["https://github.com/EOSIO/eos/graphs/contributors?from=2017-04-02&amp;to=2018-01-20&amp;type=a"],"app":"steemit/0.1","format":"markdown"}
parent author
parent permlinkeos
permlinkeos-github-repository
title누가 주요 개발진인지 EOS의 GITHUB repository를 털어(?)보았습니다.
Transaction InfoBlock #19220961/Trx b2646848b08b300ddd0b13de1806ef4ba679d9eb
View Raw JSON Data
{
  "block": 19220961,
  "op": [
    "comment",
    {
      "author": "fureweb",
      "body": "여러 기여자들이 있지만, 그 중 상위 9개 계정(code additions기준)에 대해 간단하게 조사를 해 보았습니다.\n\n해당 링크는 https://github.com/EOSIO/eos/graphs/contributors?from=2017-04-02&to=2018-01-20&type=a 입니다.\n\n![addtion_top10.png](https://steemitimages.com/DQmQofZf6k8nvavR2hE6ypELQnhEdnzWq3FZTqbKsuBAzrf/addtion_top10.png)\n\n#1 - bytemaster : 아시다시피 대니얼 라리머입니다!\n\n#2 - jgiszczak : 현재로서는 소속을 확인할 수 없었습니다. EOS 관련 코어 부분 코드에 많은 기여를 하고 있음만 확인할 수 있었습니다.\n\n#3 - nathanhourt : Follow My vote라는 회사의 CTO입니다. 현재 수행중인 비즈니스와는 직접적으로 연관은 없어 보이지만, 아마 EOS 플랫폼 위에서 돌아가는 DApp을 개발중인 것으로 추정될 뿐입니다.\n\n#4 - pmesnier : Object Computing(이하 OCI) 회사 소속 프로그래머입니다.\n\n#5 - ChristianDunst : 현재로서는 소속을 확인할 수 없었습니다.\n\n#6 - heifner : OCI 소속 프로그래머입니다.\n\n#7 - elmato : 현재로서는 소속을 확인할 수 없었습니다. 해당 개발자의 리파지토리를 봤을 때, 암호화폐 하드웨어 지갑 관련하여 작업한 커밋 내역들이 있음을 확인하였습니다.\n\n#8 - brianjohnson5972 : OCI 소속 프로그래머입니다.\n\n#9 - dskvr : 헝가리에서 거주하는 개발자로 확인되며, 소속은 따로 확인할 수 없었습니다.\n\n그 외에 코드 기여 정도를 확인해 보았을 때, 아래 처럼 OCI라는 회사 계정과 연결되어있는 계정들의 커밋 이력을 확인할 수 있습니다.\n\n![included_oci_keywords.png](https://steemitimages.com/DQmetps5FJ4QcUZ8ivhthQvYTSKqZ9vE8Q2zGsz5DnZZoad/included_oci_keywords.png)\n\n이 OCI라는 회사에 대한 정보를 조금 더 확인해 보았습니다.\n\nObject Computing이라는 이 회사는 세인트루이스 주에 설립된 'We are software engineers.' 라는 간지나는 슬로건을 내걸고 있는, Software Engineering, IOT, Machine Learning, Blockchain Consulting 네가지 분야에 대한 업무를 수행하고 있는 회사로 확인되었습니다.\n\n이 중 블록체인 컨설팅 메뉴 하단에서 확인할 수 있는 파트너 회사들을 봤을 때, block.one과 eos는 제외하고 ripe.io라는 Transparency in Every Byte of Food 라는 메시지를 슬로건으로 하고 있는 회사를 파트너로 두고 있는, EOS 플랫폼에 큰 기여를 하고 있는 회사로 확인되고 있습니다.\n\n![clients.png](https://steemitimages.com/DQmY7DSES5mBS4Gm9BXmmx6Ar39SdHeb1YA4Fb8PB2jWYDU/clients.png)\n\n이 회사 소속 엔지니어들이 중요한 역할을 하고 있음을 간접적으로 확인할 수 있었습니다.",
      "json_metadata": "{\"tags\":[\"eos\",\"kr\"],\"image\":[\"https://steemitimages.com/DQmQofZf6k8nvavR2hE6ypELQnhEdnzWq3FZTqbKsuBAzrf/addtion_top10.png\",\"https://steemitimages.com/DQmetps5FJ4QcUZ8ivhthQvYTSKqZ9vE8Q2zGsz5DnZZoad/included_oci_keywords.png\",\"https://steemitimages.com/DQmY7DSES5mBS4Gm9BXmmx6Ar39SdHeb1YA4Fb8PB2jWYDU/clients.png\"],\"links\":[\"https://github.com/EOSIO/eos/graphs/contributors?from=2017-04-02&amp;to=2018-01-20&amp;type=a\"],\"app\":\"steemit/0.1\",\"format\":\"markdown\"}",
      "parent_author": "",
      "parent_permlink": "eos",
      "permlink": "eos-github-repository",
      "title": "누가 주요 개발진인지 EOS의 GITHUB repository를 털어(?)보았습니다."
    }
  ],
  "op_in_trx": 0,
  "timestamp": "2018-01-23T05:20:48",
  "trx_id": "b2646848b08b300ddd0b13de1806ef4ba679d9eb",
  "trx_in_block": 43,
  "virtual_op": 0
}
2018/01/23 04:19:09
authorfureweb
permlinkeos-github-repository
voterkim0375
weight10000 (100.00%)
Transaction InfoBlock #19219728/Trx 035a09710642008e74666abafb4ed3d7348a8646
View Raw JSON Data
{
  "block": 19219728,
  "op": [
    "vote",
    {
      "author": "fureweb",
      "permlink": "eos-github-repository",
      "voter": "kim0375",
      "weight": 10000
    }
  ],
  "op_in_trx": 0,
  "timestamp": "2018-01-23T04:19:09",
  "trx_id": "035a09710642008e74666abafb4ed3d7348a8646",
  "trx_in_block": 4,
  "virtual_op": 0
}
2018/01/23 01:42:24
authorfureweb
permlinkeos-github-repository
votergreene0
weight10000 (100.00%)
Transaction InfoBlock #19216596/Trx 4fc09885a599da75f1918fde9b7126dc06a9c8d8
View Raw JSON Data
{
  "block": 19216596,
  "op": [
    "vote",
    {
      "author": "fureweb",
      "permlink": "eos-github-repository",
      "voter": "greene0",
      "weight": 10000
    }
  ],
  "op_in_trx": 0,
  "timestamp": "2018-01-23T01:42:24",
  "trx_id": "4fc09885a599da75f1918fde9b7126dc06a9c8d8",
  "trx_in_block": 16,
  "virtual_op": 0
}
furewebfollowed @eosio
2018/01/22 23:37:09
idfollow
json["follow",{"follower":"fureweb","following":"eosio","what":["blog"]}]
required auths[]
required posting auths["fureweb"]
Transaction InfoBlock #19214092/Trx 4e57c00ec27da84ec4627a48c279a71bd3cffa96
View Raw JSON Data
{
  "block": 19214092,
  "op": [
    "custom_json",
    {
      "id": "follow",
      "json": "[\"follow\",{\"follower\":\"fureweb\",\"following\":\"eosio\",\"what\":[\"blog\"]}]",
      "required_auths": [],
      "required_posting_auths": [
        "fureweb"
      ]
    }
  ],
  "op_in_trx": 0,
  "timestamp": "2018-01-22T23:37:09",
  "trx_id": "4e57c00ec27da84ec4627a48c279a71bd3cffa96",
  "trx_in_block": 44,
  "virtual_op": 0
}
2018/01/22 18:01:45
authorfureweb
permlinkeos-github-repository
voterdjowa
weight10000 (100.00%)
Transaction InfoBlock #19207386/Trx 3728c29d119bbd102c7732ec4c816f7c5ab9412c
View Raw JSON Data
{
  "block": 19207386,
  "op": [
    "vote",
    {
      "author": "fureweb",
      "permlink": "eos-github-repository",
      "voter": "djowa",
      "weight": 10000
    }
  ],
  "op_in_trx": 0,
  "timestamp": "2018-01-22T18:01:45",
  "trx_id": "3728c29d119bbd102c7732ec4c816f7c5ab9412c",
  "trx_in_block": 15,
  "virtual_op": 0
}
2018/01/22 16:43:12
authorfureweb
permlinkeos-github-repository
voterstorysharing
weight10000 (100.00%)
Transaction InfoBlock #19205815/Trx 7d4f39d4a95de3949233a3452ecf4267e92dd1fd
View Raw JSON Data
{
  "block": 19205815,
  "op": [
    "vote",
    {
      "author": "fureweb",
      "permlink": "eos-github-repository",
      "voter": "storysharing",
      "weight": 10000
    }
  ],
  "op_in_trx": 0,
  "timestamp": "2018-01-22T16:43:12",
  "trx_id": "7d4f39d4a95de3949233a3452ecf4267e92dd1fd",
  "trx_in_block": 34,
  "virtual_op": 0
}
2018/01/22 15:08:18
authorfureweb
permlinkeos-github-repository
voterdonghyunkim
weight10000 (100.00%)
Transaction InfoBlock #19203918/Trx 74b06826bfdbef3745c7ca19c0413b0b1c0d6906
View Raw JSON Data
{
  "block": 19203918,
  "op": [
    "vote",
    {
      "author": "fureweb",
      "permlink": "eos-github-repository",
      "voter": "donghyunkim",
      "weight": 10000
    }
  ],
  "op_in_trx": 0,
  "timestamp": "2018-01-22T15:08:18",
  "trx_id": "74b06826bfdbef3745c7ca19c0413b0b1c0d6906",
  "trx_in_block": 7,
  "virtual_op": 0
}
2018/01/22 14:46:12
authorfureweb
permlinkeos-github-repository
voterlylm
weight7500 (75.00%)
Transaction InfoBlock #19203476/Trx 98546c1b76dff77d5eca80f7390ff87c15fd5cd5
View Raw JSON Data
{
  "block": 19203476,
  "op": [
    "vote",
    {
      "author": "fureweb",
      "permlink": "eos-github-repository",
      "voter": "lylm",
      "weight": 7500
    }
  ],
  "op_in_trx": 0,
  "timestamp": "2018-01-22T14:46:12",
  "trx_id": "98546c1b76dff77d5eca80f7390ff87c15fd5cd5",
  "trx_in_block": 6,
  "virtual_op": 0
}
2018/01/22 14:12:36
authorfureweb
permlinkeos-github-repository
voterlesto
weight3000 (30.00%)
Transaction InfoBlock #19202804/Trx 90d3fefa75113b79c4206598c1e5ccc833ebcb92
View Raw JSON Data
{
  "block": 19202804,
  "op": [
    "vote",
    {
      "author": "fureweb",
      "permlink": "eos-github-repository",
      "voter": "lesto",
      "weight": 3000
    }
  ],
  "op_in_trx": 0,
  "timestamp": "2018-01-22T14:12:36",
  "trx_id": "90d3fefa75113b79c4206598c1e5ccc833ebcb92",
  "trx_in_block": 34,
  "virtual_op": 0
}
2018/01/22 13:36:36
authorfureweb
body감사합니다 :)
json metadata{"tags":["eos"],"app":"steemit/0.1"}
parent authorjjangdol69
parent permlinkre-fureweb-eos-github-repository-20180122t092448865z
permlinkre-jjangdol69-re-fureweb-eos-github-repository-20180122t133633661z
title
Transaction InfoBlock #19202085/Trx 7d3076e29e00a7e506e9e157d67c6ca2c86614ea
View Raw JSON Data
{
  "block": 19202085,
  "op": [
    "comment",
    {
      "author": "fureweb",
      "body": "감사합니다 :)",
      "json_metadata": "{\"tags\":[\"eos\"],\"app\":\"steemit/0.1\"}",
      "parent_author": "jjangdol69",
      "parent_permlink": "re-fureweb-eos-github-repository-20180122t092448865z",
      "permlink": "re-jjangdol69-re-fureweb-eos-github-repository-20180122t133633661z",
      "title": ""
    }
  ],
  "op_in_trx": 0,
  "timestamp": "2018-01-22T13:36:36",
  "trx_id": "7d3076e29e00a7e506e9e157d67c6ca2c86614ea",
  "trx_in_block": 4,
  "virtual_op": 0
}

Account Metadata

POSTING JSON METADATA
profile{"profile_image":"https://us.v-cdn.net/6030588/uploads/userpics/593/pYJVW1N7GLYZ9.png","name":"fureweb","location":"Seoul","website":"https://fureweb-com.github.io"}
JSON METADATA
profile{"profile_image":"https://us.v-cdn.net/6030588/uploads/userpics/593/pYJVW1N7GLYZ9.png","name":"fureweb","location":"Seoul","website":"https://fureweb-com.github.io"}
{
  "posting_json_metadata": {
    "profile": {
      "profile_image": "https://us.v-cdn.net/6030588/uploads/userpics/593/pYJVW1N7GLYZ9.png",
      "name": "fureweb",
      "location": "Seoul",
      "website": "https://fureweb-com.github.io"
    }
  },
  "json_metadata": {
    "profile": {
      "profile_image": "https://us.v-cdn.net/6030588/uploads/userpics/593/pYJVW1N7GLYZ9.png",
      "name": "fureweb",
      "location": "Seoul",
      "website": "https://fureweb-com.github.io"
    }
  }
}

Auth Keys

Owner
Single Signature
Public Keys
STM6nQ64PzsSeiqufnvCT1PUfnoFh9JhyCuYw2tPwFfXx5RpuytMB1/1
Active
Single Signature
Public Keys
STM5Qpzye4kiA4HjaP5CnqeYbcdPWGS78EzryBhPkfQPqqjSsCWKp1/1
Posting
Single Signature
Public Keys
STM7Hf9eLLqTmJkgcUqPkVh1mY8NDoiMwZobTEZwU6ydEDe5bMGQf1/1
Memo
STM8iPJ3gKittsH9Ae8uLDzXHzpv2n56dd9iKt8Z1P4TS775rsaAD
{
  "owner": {
    "account_auths": [],
    "key_auths": [
      [
        "STM6nQ64PzsSeiqufnvCT1PUfnoFh9JhyCuYw2tPwFfXx5RpuytMB",
        1
      ]
    ],
    "weight_threshold": 1
  },
  "active": {
    "account_auths": [],
    "key_auths": [
      [
        "STM5Qpzye4kiA4HjaP5CnqeYbcdPWGS78EzryBhPkfQPqqjSsCWKp",
        1
      ]
    ],
    "weight_threshold": 1
  },
  "posting": {
    "account_auths": [],
    "key_auths": [
      [
        "STM7Hf9eLLqTmJkgcUqPkVh1mY8NDoiMwZobTEZwU6ydEDe5bMGQf",
        1
      ]
    ],
    "weight_threshold": 1
  },
  "memo": "STM8iPJ3gKittsH9Ae8uLDzXHzpv2n56dd9iKt8Z1P4TS775rsaAD"
}

Witness Votes

0 / 30
No active witness votes.
[]