<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	xmlns:series="https://publishpress.com/"
	>

<channel>
	<title>Việt Nguyễn, Author at Tomoshare</title>
	<atom:link href="https://blog.tomosia.com.vn/author/vietnguyen2509/feed/" rel="self" type="application/rss+xml" />
	<link>https://blog.tomosia.com.vn/author/vietnguyen2509/</link>
	<description>Kênh chia sẻ kiến thức Tomosia Việt Nam</description>
	<lastBuildDate>Tue, 31 Oct 2023 10:10:59 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=7.0</generator>

<image>
	<url>https://blog.tomosia.com.vn/wp-content/uploads/2023/09/cropped-icon-32x32.png</url>
	<title>Việt Nguyễn, Author at Tomoshare</title>
	<link>https://blog.tomosia.com.vn/author/vietnguyen2509/</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Setup New Relic for monitoring AWS Beanstalk and Java Spring Boot</title>
		<link>https://blog.tomosia.com.vn/setup-new-relic-for-monitoring-aws-beanstalk-and-java-spring-boot/</link>
					<comments>https://blog.tomosia.com.vn/setup-new-relic-for-monitoring-aws-beanstalk-and-java-spring-boot/#comments</comments>
		
		<dc:creator><![CDATA[Việt Nguyễn]]></dc:creator>
		<pubDate>Tue, 31 Oct 2023 10:10:56 +0000</pubDate>
				<category><![CDATA[AWS]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[performance]]></category>
		<category><![CDATA[monitoring]]></category>
		<category><![CDATA[NewRelic]]></category>
		<guid isPermaLink="false">https://blog.tomosia.com.vn/?p=1655</guid>

					<description><![CDATA[<p>New Relic là một dịch vụ giúp bạn theo giõi tần suất hoạt động của máy chủ, cũng&#8230;</p>
<p>The post <a href="https://blog.tomosia.com.vn/setup-new-relic-for-monitoring-aws-beanstalk-and-java-spring-boot/">Setup New Relic for monitoring AWS Beanstalk and Java Spring Boot</a> appeared first on <a href="https://blog.tomosia.com.vn">Tomoshare</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">New Relic là một dịch vụ giúp bạn theo giõi tần suất hoạt động của máy chủ, cũng như theo giõi các ứng dụng được chạy trên máy chủ như Java, PHP, Ruby,&#8230; Chúng ta có thể theo giõi tổng quan mà không cần phải truy cập vào máy chủ để kiểm tra. </p>



<p class="wp-block-paragraph">Ở bài viết này, mình sẽ hướng dẫn các bạn setup New Relic với máy chủ sử dụng dịch vụ AWS Beanstalk và ứng dụng đc viết bằng Java Spring Boot. Bắt đầu thôiiii.</p>



<h2 id="1-dang-ki-tai-khoan-new-relic" class="wp-block-heading">1. Đăng kí tài khoản New Relic</h2>



<p class="wp-block-paragraph">Đăng kí tài khoản New Relic rất dễ dàng tại link sau: <a href="https://newrelic.com/signup">https://newrelic.com/signup</a></p>



<p class="wp-block-paragraph">Sau khi đăng kí thằng công, màn hình hiển thị trang dashboard của hệ thống và chúng ta có thể bắt đầu setup</p>



<figure class="wp-block-image size-large"><img fetchpriority="high" decoding="async" width="1024" height="510" src="http://blog.tomosia.com.vn/wp-content/uploads/2023/10/image-65-1024x510.png" alt="" class="wp-image-1661" srcset="https://blog.tomosia.com.vn/wp-content/uploads/2023/10/image-65-1024x510.png 1024w, https://blog.tomosia.com.vn/wp-content/uploads/2023/10/image-65-300x149.png 300w, https://blog.tomosia.com.vn/wp-content/uploads/2023/10/image-65-768x383.png 768w, https://blog.tomosia.com.vn/wp-content/uploads/2023/10/image-65-1536x765.png 1536w, https://blog.tomosia.com.vn/wp-content/uploads/2023/10/image-65-2048x1020.png 2048w, https://blog.tomosia.com.vn/wp-content/uploads/2023/10/image-65-380x189.png 380w, https://blog.tomosia.com.vn/wp-content/uploads/2023/10/image-65-800x399.png 800w, https://blog.tomosia.com.vn/wp-content/uploads/2023/10/image-65-1160x578.png 1160w, https://blog.tomosia.com.vn/wp-content/uploads/2023/10/image-65.png 3356w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<h2 id="2-tao-ung-dung-java-va-cai-dat" class="wp-block-heading">2. Tạo ứng dụng Java và cài đặt</h2>



<h3 id="2-1-thong-tin-ung-dung" class="wp-block-heading">2.1. Thông tin ứng dụng</h3>



<p class="wp-block-paragraph">Trên bảng stack, chọn ứng dụng Java và tiếp tục, sau đó chọn <strong>Don&#8217;t have access</strong> the host và chọn Java tại mục <strong>Connect your applications</strong>.</p>



<figure class="wp-block-image size-large"><img decoding="async" width="1024" height="508" src="http://blog.tomosia.com.vn/wp-content/uploads/2023/10/image-66-1024x508.png" alt="" class="wp-image-1662" srcset="https://blog.tomosia.com.vn/wp-content/uploads/2023/10/image-66-1024x508.png 1024w, https://blog.tomosia.com.vn/wp-content/uploads/2023/10/image-66-300x149.png 300w, https://blog.tomosia.com.vn/wp-content/uploads/2023/10/image-66-768x381.png 768w, https://blog.tomosia.com.vn/wp-content/uploads/2023/10/image-66-1536x762.png 1536w, https://blog.tomosia.com.vn/wp-content/uploads/2023/10/image-66-2048x1015.png 2048w, https://blog.tomosia.com.vn/wp-content/uploads/2023/10/image-66-380x188.png 380w, https://blog.tomosia.com.vn/wp-content/uploads/2023/10/image-66-800x397.png 800w, https://blog.tomosia.com.vn/wp-content/uploads/2023/10/image-66-1160x575.png 1160w, https://blog.tomosia.com.vn/wp-content/uploads/2023/10/image-66.png 3356w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<p class="wp-block-paragraph">Ở bài viết này chúng ta đang thực hiện trên máy chủ AWS Beanstalk nên tôi sẽ chọn <strong>On a host</strong>. Sau đó nhập tên ứng dụng và làm các bước theo hướng dẫn.</p>



<p class="wp-block-paragraph">Ở bước <strong>Tell us about your environment</strong>, tôi chọn <strong>running on Linux</strong> và framework là Spring Boot.</p>



<h3 id="2-2-cai-dat-goi-thu-vien" class="wp-block-heading">2.2. Cài đặt gói thư viện</h3>



<p class="wp-block-paragraph">Bước tiếp theo chúng ta cần tiến hành cài đặt gói thư viện. Bởi vì dùng AWS Beanstalk nên tôi sẽ thực hiện việc cài đặt trong folder <strong><em>.ebextension</em></strong></p>



<p class="wp-block-paragraph">Tạo file <strong><em>newrelic.config</em></strong> trong thư mục <strong><em>.ebextensions</em></strong></p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#F8F8F2;--cbp-line-number-width:16.854156494140625px;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#333545;color:#efefe1">ShellScript</span><span role="button" tabindex="0" data-code="commands:
  01-download-java-agent:
    command: &quot;curl -O https://download.newrelic.com/newrelic/java-agent/newrelic-agent/current/newrelic-java.zip &amp;&amp; mv newrelic-java.zip /var/newrelic-java.zip&quot;
  02-unzip-java-agent:
    command: &quot;unzip -o /var/newrelic-java.zip -d /var/&quot;
  03-give-permissions-to-newrelic:
    command: &quot;chmod a+rwx /var/newrelic&quot;
  04-replace-license-key:
    command: &quot;sed -i 's/&lt;%= license_key %&gt;/your_application_license_key/g' /var/newrelic/newrelic.yml&quot;
  05-replace-application-name:
    command: &quot;sed -i 's/My Application/your_application_license_key/g' /var/newrelic/newrelic.yml&quot;
  06-enable-infras-and-logs-metric:
       command: &quot;your_application_cmd_curl_infra&quot;" style="color:#F8F8F2;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dracula" style="background-color: #282A36" tabindex="0"><code><span class="line"><span style="color: #50FA7B">commands:</span></span>
<span class="line"><span style="color: #F8F8F2">  </span><span style="color: #50FA7B">01-download-java-agent:</span></span>
<span class="line"><span style="color: #F8F8F2">    </span><span style="color: #8BE9FD">command</span><span style="color: #F8F8F2">: </span><span style="color: #E9F284">&quot;</span><span style="color: #F1FA8C">curl -O https://download.newrelic.com/newrelic/java-agent/newrelic-agent/current/newrelic-java.zip &amp;&amp; mv newrelic-java.zip /var/newrelic-java.zip</span><span style="color: #E9F284">&quot;</span></span>
<span class="line"><span style="color: #F8F8F2">  </span><span style="color: #50FA7B">02-unzip-java-agent:</span></span>
<span class="line"><span style="color: #F8F8F2">    </span><span style="color: #8BE9FD">command</span><span style="color: #F8F8F2">: </span><span style="color: #E9F284">&quot;</span><span style="color: #F1FA8C">unzip -o /var/newrelic-java.zip -d /var/</span><span style="color: #E9F284">&quot;</span></span>
<span class="line"><span style="color: #F8F8F2">  </span><span style="color: #50FA7B">03-give-permissions-to-newrelic:</span></span>
<span class="line"><span style="color: #F8F8F2">    </span><span style="color: #8BE9FD">command</span><span style="color: #F8F8F2">: </span><span style="color: #E9F284">&quot;</span><span style="color: #F1FA8C">chmod a+rwx /var/newrelic</span><span style="color: #E9F284">&quot;</span></span>
<span class="line"><span style="color: #F8F8F2">  </span><span style="color: #50FA7B">04-replace-license-key:</span></span>
<span class="line"><span style="color: #F8F8F2">    </span><span style="color: #8BE9FD">command</span><span style="color: #F8F8F2">: </span><span style="color: #E9F284">&quot;</span><span style="color: #F1FA8C">sed -i &#39;s/&lt;%= license_key %&gt;/your_application_license_key/g&#39; /var/newrelic/newrelic.yml</span><span style="color: #E9F284">&quot;</span></span>
<span class="line"><span style="color: #F8F8F2">  </span><span style="color: #50FA7B">05-replace-application-name:</span></span>
<span class="line"><span style="color: #F8F8F2">    </span><span style="color: #8BE9FD">command</span><span style="color: #F8F8F2">: </span><span style="color: #E9F284">&quot;</span><span style="color: #F1FA8C">sed -i &#39;s/My Application/your_application_license_key/g&#39; /var/newrelic/newrelic.yml</span><span style="color: #E9F284">&quot;</span></span>
<span class="line"><span style="color: #F8F8F2">  </span><span style="color: #50FA7B">06-enable-infras-and-logs-metric:</span></span>
<span class="line"><span style="color: #F8F8F2">       </span><span style="color: #8BE9FD">command</span><span style="color: #F8F8F2">: </span><span style="color: #E9F284">&quot;</span><span style="color: #F1FA8C">your_application_cmd_curl_infra</span><span style="color: #E9F284">&quot;</span></span></code></pre></div>



<p class="wp-block-paragraph">Trong đó:</p>



<ul class="wp-block-list">
<li><strong>your_application_license_key</strong>: license_key của bạn.</li>



<li><strong>your_application_license_key</strong>: Application name mà bạn đã đăng kí vơi new relic.</li>



<li><strong>your_application_cmd_curl_infra</strong>: Command bạn nhận đc ở bước <strong>Connect your logs and infrastructure</strong>.</li>
</ul>



<p class="wp-block-paragraph">Nếu bạn chỉ muốn giám sát ứng dụng mà ko muốn giám sát Infras, bạn có thể bỏ qua bước <strong>06-enable-infras-and-logs-metric</strong>. Nếu cài đặt hãy disable option <strong>Automatically answer &#8220;yes&#8221; to all install prompts. We&#8217;ll stop the installer if there&#8217;s an error.</strong> trên dashboard NewRelic</p>



<figure class="wp-block-image size-large"><img decoding="async" width="1024" height="464" src="http://blog.tomosia.com.vn/wp-content/uploads/2023/10/image-67-1024x464.png" alt="" class="wp-image-1665" srcset="https://blog.tomosia.com.vn/wp-content/uploads/2023/10/image-67-1024x464.png 1024w, https://blog.tomosia.com.vn/wp-content/uploads/2023/10/image-67-300x136.png 300w, https://blog.tomosia.com.vn/wp-content/uploads/2023/10/image-67-768x348.png 768w, https://blog.tomosia.com.vn/wp-content/uploads/2023/10/image-67-1536x695.png 1536w, https://blog.tomosia.com.vn/wp-content/uploads/2023/10/image-67-2048x927.png 2048w, https://blog.tomosia.com.vn/wp-content/uploads/2023/10/image-67-380x172.png 380w, https://blog.tomosia.com.vn/wp-content/uploads/2023/10/image-67-800x362.png 800w, https://blog.tomosia.com.vn/wp-content/uploads/2023/10/image-67-1160x525.png 1160w, https://blog.tomosia.com.vn/wp-content/uploads/2023/10/image-67.png 2730w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<h2 id="3-deploy-voi-codebuild-va-codepipeline" class="wp-block-heading">3. Deploy với CodeBuild và CodePipeline</h2>



<p class="wp-block-paragraph">Chúng ta cần tạo file Procfile trong folder root của source code để định nghĩa câu lệnh chạy ứng dụng java kèm theo NewRelic</p>



<p class="wp-block-paragraph"><strong>Procfile</strong>:</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#F8F8F2;--cbp-line-number-width:8.42535400390625px;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#333545;color:#efefe1">ShellScript</span><span role="button" tabindex="0" data-code="web: java -javaagent:/var/newrelic/newrelic.jar -jar app.jar" style="color:#F8F8F2;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dracula" style="background-color: #282A36" tabindex="0"><code><span class="line"><span style="color: #50FA7B">web:</span><span style="color: #F8F8F2"> </span><span style="color: #F1FA8C">java</span><span style="color: #F8F8F2"> </span><span style="color: #BD93F9">-javaagent:/var/newrelic/newrelic.jar</span><span style="color: #F8F8F2"> </span><span style="color: #BD93F9">-jar</span><span style="color: #F8F8F2"> </span><span style="color: #F1FA8C">app.jar</span></span></code></pre></div>



<p class="wp-block-paragraph">Config sẽ không chạy nếu folder .ebextensions không được deploy lên Beanstalk. Dưới đây là file <strong>Buildspec</strong> của tôi</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#F8F8F2;--cbp-line-number-width:16.854171752929688px;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#333545;color:#efefe1">ShellScript</span><span role="button" tabindex="0" data-code="version: 0.2

phases:
  install:
    runtime-versions:
      java: corretto11
  build:
    commands:
      - mvn install
      - mv target/*.jar app.jar
artifacts:
  files:
    - Procfile
    - app.jar
    - .ebextensions/**/*" style="color:#F8F8F2;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dracula" style="background-color: #282A36" tabindex="0"><code><span class="line"><span style="color: #50FA7B">version:</span><span style="color: #F8F8F2"> </span><span style="color: #BD93F9">0.2</span></span>
<span class="line"></span>
<span class="line"><span style="color: #50FA7B">phases:</span></span>
<span class="line"><span style="color: #F8F8F2">  </span><span style="color: #50FA7B">install:</span></span>
<span class="line"><span style="color: #F8F8F2">    </span><span style="color: #50FA7B">runtime-versions:</span></span>
<span class="line"><span style="color: #F8F8F2">      </span><span style="color: #50FA7B">java:</span><span style="color: #F8F8F2"> </span><span style="color: #F1FA8C">corretto11</span></span>
<span class="line"><span style="color: #F8F8F2">  </span><span style="color: #50FA7B">build:</span></span>
<span class="line"><span style="color: #F8F8F2">    </span><span style="color: #50FA7B">commands:</span></span>
<span class="line"><span style="color: #F8F8F2">      </span><span style="color: #50FA7B">-</span><span style="color: #F8F8F2"> </span><span style="color: #F1FA8C">mvn</span><span style="color: #F8F8F2"> </span><span style="color: #F1FA8C">install</span></span>
<span class="line"><span style="color: #F8F8F2">      </span><span style="color: #50FA7B">-</span><span style="color: #F8F8F2"> </span><span style="color: #F1FA8C">mv</span><span style="color: #F8F8F2"> </span><span style="color: #F1FA8C">target/</span><span style="color: #BD93F9; font-style: italic">*</span><span style="color: #F1FA8C">.jar</span><span style="color: #F8F8F2"> </span><span style="color: #F1FA8C">app.jar</span></span>
<span class="line"><span style="color: #50FA7B">artifacts:</span></span>
<span class="line"><span style="color: #F8F8F2">  </span><span style="color: #50FA7B">files:</span></span>
<span class="line"><span style="color: #F8F8F2">    </span><span style="color: #50FA7B">-</span><span style="color: #F8F8F2"> </span><span style="color: #F1FA8C">Procfile</span></span>
<span class="line"><span style="color: #F8F8F2">    </span><span style="color: #50FA7B">-</span><span style="color: #F8F8F2"> </span><span style="color: #F1FA8C">app.jar</span></span>
<span class="line"><span style="color: #F8F8F2">    </span><span style="color: #50FA7B">-</span><span style="color: #F8F8F2"> </span><span style="color: #F1FA8C">.ebextensions/</span><span style="color: #BD93F9; font-style: italic">**</span><span style="color: #F1FA8C">/</span><span style="color: #BD93F9; font-style: italic">*</span></span></code></pre></div>



<p class="wp-block-paragraph">Cuối cùng sau khi deploy thành công, thực hiện Test Connection trên NewRelic để tạo ứng dụng:</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="351" src="http://blog.tomosia.com.vn/wp-content/uploads/2023/10/image-68-1024x351.png" alt="" class="wp-image-1666" srcset="https://blog.tomosia.com.vn/wp-content/uploads/2023/10/image-68-1024x351.png 1024w, https://blog.tomosia.com.vn/wp-content/uploads/2023/10/image-68-300x103.png 300w, https://blog.tomosia.com.vn/wp-content/uploads/2023/10/image-68-768x263.png 768w, https://blog.tomosia.com.vn/wp-content/uploads/2023/10/image-68-1536x527.png 1536w, https://blog.tomosia.com.vn/wp-content/uploads/2023/10/image-68-2048x702.png 2048w, https://blog.tomosia.com.vn/wp-content/uploads/2023/10/image-68-380x130.png 380w, https://blog.tomosia.com.vn/wp-content/uploads/2023/10/image-68-800x274.png 800w, https://blog.tomosia.com.vn/wp-content/uploads/2023/10/image-68-1160x398.png 1160w, https://blog.tomosia.com.vn/wp-content/uploads/2023/10/image-68.png 2258w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<h2 id="4-tong-ket" class="wp-block-heading">4. Tổng kết</h2>



<p class="wp-block-paragraph">Còn 1 phần quan trọng mình chưa đến đó là chi phí, theo mình tìm hiểu NewRelic sẽ tính phía dựa trên dung lượng sử dụng trên hệ thống, chúng ta sẽ được miễn phí với 100GB/tháng</p>



<p class="wp-block-paragraph">Trên đây là tổng hợp các bước setup NewRelic với ứng dụng Java chạy trên AWS Beanstalk của mình, hi vọng giúp ích mọi người.</p>



<p class="wp-block-paragraph">Về những thông số và giá trị đem lại anh em hãy tự trải nghiệm và tận hưởng nheeeeeeeeé</p>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph"></p>
<p>The post <a href="https://blog.tomosia.com.vn/setup-new-relic-for-monitoring-aws-beanstalk-and-java-spring-boot/">Setup New Relic for monitoring AWS Beanstalk and Java Spring Boot</a> appeared first on <a href="https://blog.tomosia.com.vn">Tomoshare</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.tomosia.com.vn/setup-new-relic-for-monitoring-aws-beanstalk-and-java-spring-boot/feed/</wfw:commentRss>
			<slash:comments>6</slash:comments>
		
		
			</item>
		<item>
		<title>Lỗ hổng Cross-Site Scripting (XSS)</title>
		<link>https://blog.tomosia.com.vn/lo-hong-cross-site-scripting-xss/</link>
					<comments>https://blog.tomosia.com.vn/lo-hong-cross-site-scripting-xss/#comments</comments>
		
		<dc:creator><![CDATA[Việt Nguyễn]]></dc:creator>
		<pubDate>Wed, 27 Sep 2023 17:21:47 +0000</pubDate>
				<category><![CDATA[Security]]></category>
		<category><![CDATA[hacking]]></category>
		<category><![CDATA[cyber]]></category>
		<category><![CDATA[cors]]></category>
		<category><![CDATA[xss]]></category>
		<guid isPermaLink="false">https://blog.tomosia.com.vn/?p=110</guid>

					<description><![CDATA[<p>XSS luôn được xem là nỗi đau đầu đối với dân IT hiện nay khi nhắc đến vấn đề&#8230;</p>
<p>The post <a href="https://blog.tomosia.com.vn/lo-hong-cross-site-scripting-xss/">Lỗ hổng Cross-Site Scripting (XSS)</a> appeared first on <a href="https://blog.tomosia.com.vn">Tomoshare</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph"><a href="https://fptcloud.com/xss/"><strong>XSS</strong></a> luôn được xem là nỗi đau đầu đối với dân IT hiện nay khi nhắc đến vấn đề lỗ hổng bảo mật. Vậy bạn đã hiểu rõ được cụ thể <strong><em>XSS là gì</em></strong> hay chưa? Làm sao để có thể bảo vệ hệ thống dữ liệu trước sự tấn công của XSS? Để có đáp án cho câu hỏi này bạn hãy cùng tôi đi tìm đáp án cụ thể.</p>



<p class="wp-block-paragraph"></p>
<p>The post <a href="https://blog.tomosia.com.vn/lo-hong-cross-site-scripting-xss/">Lỗ hổng Cross-Site Scripting (XSS)</a> appeared first on <a href="https://blog.tomosia.com.vn">Tomoshare</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.tomosia.com.vn/lo-hong-cross-site-scripting-xss/feed/</wfw:commentRss>
			<slash:comments>4</slash:comments>
		
		
		
		<series:name><![CDATA[Web vulnerability]]></series:name>
	</item>
		<item>
		<title>SQL Injection</title>
		<link>https://blog.tomosia.com.vn/sql-injection/</link>
					<comments>https://blog.tomosia.com.vn/sql-injection/#comments</comments>
		
		<dc:creator><![CDATA[Việt Nguyễn]]></dc:creator>
		<pubDate>Wed, 27 Sep 2023 17:06:20 +0000</pubDate>
				<category><![CDATA[Security]]></category>
		<category><![CDATA[security]]></category>
		<category><![CDATA[Injection]]></category>
		<category><![CDATA[Sql]]></category>
		<guid isPermaLink="false">https://blog.tomosia.com.vn/?p=103</guid>

					<description><![CDATA[<p>SQL Injection&#160;là một kỹ thuật lợi dụng những lỗ hổng về câu truy vấn của các ứng dụng.&#8230;</p>
<p>The post <a href="https://blog.tomosia.com.vn/sql-injection/">SQL Injection</a> appeared first on <a href="https://blog.tomosia.com.vn">Tomoshare</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph"><strong>SQL Injection</strong>&nbsp;là một kỹ thuật lợi dụng những lỗ hổng về câu truy vấn của các ứng dụng. Được thực hiện bằng cách chèn thêm một đoạn&nbsp;<a href="https://topdev.vn/blog/sql-la-gi/">SQL</a>&nbsp;để làm sai lệnh đi câu truy vấn ban đầu, từ đó có thể khai thác dữ liệu từ database.&nbsp;<strong>SQL injection</strong>&nbsp;có thể cho phép những kẻ tấn công thực hiện các thao tác như một người quản trị web,&nbsp;trên cơ sở dữ liệu của ứng dụng</p>
<p>The post <a href="https://blog.tomosia.com.vn/sql-injection/">SQL Injection</a> appeared first on <a href="https://blog.tomosia.com.vn">Tomoshare</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.tomosia.com.vn/sql-injection/feed/</wfw:commentRss>
			<slash:comments>5</slash:comments>
		
		
		
		<series:name><![CDATA[Web vulnerability]]></series:name>
	</item>
		<item>
		<title>Những cập nhật trong Laravel 10</title>
		<link>https://blog.tomosia.com.vn/nhung-cap-nhat-trong-laravel-10/</link>
					<comments>https://blog.tomosia.com.vn/nhung-cap-nhat-trong-laravel-10/#comments</comments>
		
		<dc:creator><![CDATA[Việt Nguyễn]]></dc:creator>
		<pubDate>Wed, 27 Sep 2023 09:03:14 +0000</pubDate>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Laravel]]></category>
		<guid isPermaLink="false">https://blog.tomosia.com.vn/?p=56</guid>

					<description><![CDATA[<p>Sau hơn một thập kỷ kể từ khi giới thiệu vào tháng Sáu năm 2011,&#160;Framework Laravel&#160;đã trở nên&#8230;</p>
<p>The post <a href="https://blog.tomosia.com.vn/nhung-cap-nhat-trong-laravel-10/">Những cập nhật trong Laravel 10</a> appeared first on <a href="https://blog.tomosia.com.vn">Tomoshare</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Sau hơn một thập kỷ kể từ khi giới thiệu vào tháng Sáu năm 2011,&nbsp;<strong>Framework Laravel</strong>&nbsp;đã trở nên cực kỳ phổ biến. Các phiên bản của Laravel được release hằng năm với những nâng cấp đáng kể.</p>



<p class="wp-block-paragraph">Mới đây, vào ngày 14 tháng 2 năm 2023, phiên bản&nbsp;<strong>Laravel 10</strong>&nbsp;chính thức được phát hành. Chúng ta hãy cùng nhau tìm hiểu xem phiên bản này có những thay đổi và cập nhật gì so với những phiên bản trước nhé.</p>



<h2 id="native-type-declarations" class="wp-block-heading">Native Type Declarations</h2>



<p class="wp-block-paragraph">Trước version 10: sử dụng&nbsp;<strong>DocBlocks</strong>&nbsp;để làm rõ chức năng của một function và loại parameters hoặc response mong đợi.</p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#282A36"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" data-code="    /**
    * Determine whether the user can create models.
    *
    * @param User $user
    * @return IlluminateAuthAccessResponse|bool
    */
    public function create(User $user)
    {
      //
    }" style="color:#F8F8F2;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki dracula" style="background-color: #282A36" tabindex="0"><code><span class="line"><span style="color: #F8F8F2">    </span><span style="color: #6272A4">/**</span></span>
<span class="line"><span style="color: #6272A4">    * Determine whether the user can create models.</span></span>
<span class="line"><span style="color: #6272A4">    *</span></span>
<span class="line"><span style="color: #6272A4">    * </span><span style="color: #FF79C6">@param</span><span style="color: #6272A4"> </span><span style="color: #8BE9FD; font-style: italic">User</span><span style="color: #6272A4"> $user</span></span>
<span class="line"><span style="color: #6272A4">    * </span><span style="color: #FF79C6">@return</span><span style="color: #6272A4"> </span><span style="color: #8BE9FD; font-style: italic">IlluminateAuthAccessResponse</span><span style="color: #6272A4">|</span><span style="color: #FF79C6">bool</span></span>
<span class="line"><span style="color: #6272A4">    */</span></span>
<span class="line"><span style="color: #F8F8F2">    </span><span style="color: #FF79C6">public</span><span style="color: #F8F8F2"> </span><span style="color: #FF79C6">function</span><span style="color: #F8F8F2"> </span><span style="color: #50FA7B">create</span><span style="color: #F8F8F2">(</span><span style="color: #8BE9FD; font-style: italic">User</span><span style="color: #F8F8F2"> $user)</span></span>
<span class="line"><span style="color: #F8F8F2">    {</span></span>
<span class="line"><span style="color: #F8F8F2">      </span><span style="color: #6272A4">//</span></span>
<span class="line"><span style="color: #F8F8F2">    }</span></span></code></pre></div>



<p class="wp-block-paragraph">Version 10:</p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#282A36"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" data-code="    /**
     * Store a newly created resource in storage.
     */
    public function store(Request $request): View
    {
        return view('');
    }
" style="color:#F8F8F2;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki dracula" style="background-color: #282A36" tabindex="0"><code><span class="line"><span style="color: #F8F8F2">    </span><span style="color: #6272A4">/**</span></span>
<span class="line"><span style="color: #6272A4">     * Store a newly created resource in storage.</span></span>
<span class="line"><span style="color: #6272A4">     */</span></span>
<span class="line"><span style="color: #F8F8F2">    </span><span style="color: #FF79C6">public</span><span style="color: #F8F8F2"> </span><span style="color: #FF79C6">function</span><span style="color: #F8F8F2"> </span><span style="color: #50FA7B">store</span><span style="color: #F8F8F2">(</span><span style="color: #8BE9FD; font-style: italic">Request</span><span style="color: #F8F8F2"> $request)</span><span style="color: #FF79C6">:</span><span style="color: #F8F8F2"> </span><span style="color: #8BE9FD; font-style: italic">View</span></span>
<span class="line"><span style="color: #F8F8F2">    {</span></span>
<span class="line"><span style="color: #F8F8F2">        </span><span style="color: #FF79C6">return</span><span style="color: #F8F8F2"> </span><span style="color: #50FA7B">view</span><span style="color: #F8F8F2">(</span><span style="color: #E9F284">&#39;&#39;</span><span style="color: #F8F8F2">);</span></span>
<span class="line"><span style="color: #F8F8F2">    }</span></span>
<span class="line"></span></code></pre></div>



<p class="wp-block-paragraph">Để đảm bảo được sự tương thích ngược của framework (breaking changes), các thuộc tính sẽ được áp dụng cho:</p>



<ul class="wp-block-list">
<li>Dữ liệu trả về (return types)</li>



<li>Tham số của phương thức (method arguments)</li>



<li>Loại bỏ một số khai báo types không còn cần thiết ở docblock</li>



<li>Cho phép có thể khai báo ngay trong các tham số của closure</li>
</ul>



<h2 id="ho-tro-sua-cot-cho-csdl" class="wp-block-heading">Hỗ trợ sửa cột cho CSDL</h2>



<p class="wp-block-paragraph">Nhằm loại bỏ dần nhu cầu sử dụng package&nbsp;<strong>doctrine/dbal</strong>, một tính năng mới đã được giới thiệu trong Laravel 10 cho phép các nhà phát triển sử dụng phương thức&nbsp;<strong>change()</strong>&nbsp;để sửa đổi các cột mà không cần các gói bổ sung.</p>



<p class="wp-block-paragraph">Sử dụng phương thức change() để chỉnh sửa cột.</p>



<p class="wp-block-paragraph">Ví dụ: Để sửa kiểu dữ liệu từ&nbsp;<strong>integer</strong>&nbsp;-&gt;&nbsp;<strong>bigInt</strong>&nbsp;ta làm như sau</p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#282A36"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" data-code="# before
$table-&gt;integer('user_balance')-&gt;unsigned()-&gt;default(0)-&gt;comment('balance');

# after
$table-&gt;bigInteger('user_balance')-&gt;unsigned()-&gt;default(0)-&gt;comment('balance')-&gt;change();
" style="color:#F8F8F2;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki dracula" style="background-color: #282A36" tabindex="0"><code><span class="line"><span style="color: #6272A4"># before</span></span>
<span class="line"><span style="color: #F8F8F2">$table</span><span style="color: #FF79C6">-&gt;</span><span style="color: #50FA7B">integer</span><span style="color: #F8F8F2">(</span><span style="color: #E9F284">&#39;</span><span style="color: #F1FA8C">user_balance</span><span style="color: #E9F284">&#39;</span><span style="color: #F8F8F2">)</span><span style="color: #FF79C6">-&gt;</span><span style="color: #50FA7B">unsigned</span><span style="color: #F8F8F2">()</span><span style="color: #FF79C6">-&gt;</span><span style="color: #50FA7B">default</span><span style="color: #F8F8F2">(</span><span style="color: #BD93F9">0</span><span style="color: #F8F8F2">)</span><span style="color: #FF79C6">-&gt;</span><span style="color: #50FA7B">comment</span><span style="color: #F8F8F2">(</span><span style="color: #E9F284">&#39;</span><span style="color: #F1FA8C">balance</span><span style="color: #E9F284">&#39;</span><span style="color: #F8F8F2">);</span></span>
<span class="line"></span>
<span class="line"><span style="color: #6272A4"># after</span></span>
<span class="line"><span style="color: #F8F8F2">$table</span><span style="color: #FF79C6">-&gt;</span><span style="color: #50FA7B">bigInteger</span><span style="color: #F8F8F2">(</span><span style="color: #E9F284">&#39;</span><span style="color: #F1FA8C">user_balance</span><span style="color: #E9F284">&#39;</span><span style="color: #F8F8F2">)</span><span style="color: #FF79C6">-&gt;</span><span style="color: #50FA7B">unsigned</span><span style="color: #F8F8F2">()</span><span style="color: #FF79C6">-&gt;</span><span style="color: #50FA7B">default</span><span style="color: #F8F8F2">(</span><span style="color: #BD93F9">0</span><span style="color: #F8F8F2">)</span><span style="color: #FF79C6">-&gt;</span><span style="color: #50FA7B">comment</span><span style="color: #F8F8F2">(</span><span style="color: #E9F284">&#39;</span><span style="color: #F1FA8C">balance</span><span style="color: #E9F284">&#39;</span><span style="color: #F8F8F2">)</span><span style="color: #FF79C6">-&gt;</span><span style="color: #50FA7B">change</span><span style="color: #F8F8F2">();</span></span>
<span class="line"></span></code></pre></div>



<p class="wp-block-paragraph">Note:</p>



<ul class="wp-block-list">
<li>Cần thêm tất cả thuộc tính của cột khi thay đổi nếu không chúng sẽ bị loại bỏ.</li>



<li>Nếu đã cài đặt&nbsp;<strong>doctrine/dbal</strong>, nên khai báo phương thức&nbsp;<strong>Schema::useNativeSchemaOperationsIfPossible()</strong>&nbsp;trong <strong>App/Providers/AppServiceProvider</strong>&nbsp;để sử dụng tính năng này. Laravel sẽ ưu tiên nó trước khi sử dụng đến package và không hỗ trợ cho&nbsp;<strong>SQLite</strong>.</li>
</ul>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#282A36"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" data-code="use IlluminateSupportFacadesSchema;
class AppServiceProvider extends ServiceProvider
{
  public function boot()
  {
    Schema::useNativeSchemaOperationsIfPossible();
  }
}
" style="color:#F8F8F2;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki dracula" style="background-color: #282A36" tabindex="0"><code><span class="line"><span style="color: #FF79C6">use</span><span style="color: #F8F8F2"> </span><span style="color: #8BE9FD; font-style: italic">IlluminateSupportFacadesSchema</span><span style="color: #F8F8F2">;</span></span>
<span class="line"><span style="color: #FF79C6">class</span><span style="color: #F8F8F2"> </span><span style="color: #8BE9FD">AppServiceProvider</span><span style="color: #F8F8F2"> </span><span style="color: #FF79C6">extends</span><span style="color: #F8F8F2"> </span><span style="color: #8BE9FD; font-style: italic">ServiceProvider</span></span>
<span class="line"><span style="color: #F8F8F2">{</span></span>
<span class="line"><span style="color: #F8F8F2">  </span><span style="color: #FF79C6">public</span><span style="color: #F8F8F2"> </span><span style="color: #FF79C6">function</span><span style="color: #F8F8F2"> </span><span style="color: #50FA7B">boot</span><span style="color: #F8F8F2">()</span></span>
<span class="line"><span style="color: #F8F8F2">  {</span></span>
<span class="line"><span style="color: #F8F8F2">    </span><span style="color: #8BE9FD; font-style: italic">Schema</span><span style="color: #FF79C6">::</span><span style="color: #50FA7B">useNativeSchemaOperationsIfPossible</span><span style="color: #F8F8F2">();</span></span>
<span class="line"><span style="color: #F8F8F2">  }</span></span>
<span class="line"><span style="color: #F8F8F2">}</span></span>
<span class="line"></span></code></pre></div>



<h2 id="process-interaction" class="wp-block-heading">Process Interaction</h2>



<p class="wp-block-paragraph"><strong>Process Interaction</strong>&nbsp;giúp việc thử nghiệm và chạy các quy trình&nbsp;<strong>CLI</strong>&nbsp;trở nên dễ dàng.</p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#282A36"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" data-code="use IlluminateSupportFacadesProcess;
$result = Process::run('ls -la');
$result-&gt;successful();
$result-&gt;failed();
$result-&gt;exitCode();
$result-&gt;output();
$result-&gt;errorOutput();
$result-&gt;throw();
$result-&gt;throwIf(condition);
" style="color:#F8F8F2;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki dracula" style="background-color: #282A36" tabindex="0"><code><span class="line"><span style="color: #FF79C6">use</span><span style="color: #F8F8F2"> </span><span style="color: #8BE9FD; font-style: italic">IlluminateSupportFacadesProcess</span><span style="color: #F8F8F2">;</span></span>
<span class="line"><span style="color: #F8F8F2">$result </span><span style="color: #FF79C6">=</span><span style="color: #F8F8F2"> </span><span style="color: #8BE9FD; font-style: italic">Process</span><span style="color: #FF79C6">::</span><span style="color: #50FA7B">run</span><span style="color: #F8F8F2">(</span><span style="color: #E9F284">&#39;</span><span style="color: #F1FA8C">ls -la</span><span style="color: #E9F284">&#39;</span><span style="color: #F8F8F2">);</span></span>
<span class="line"><span style="color: #F8F8F2">$result</span><span style="color: #FF79C6">-&gt;</span><span style="color: #50FA7B">successful</span><span style="color: #F8F8F2">();</span></span>
<span class="line"><span style="color: #F8F8F2">$result</span><span style="color: #FF79C6">-&gt;</span><span style="color: #50FA7B">failed</span><span style="color: #F8F8F2">();</span></span>
<span class="line"><span style="color: #F8F8F2">$result</span><span style="color: #FF79C6">-&gt;</span><span style="color: #50FA7B">exitCode</span><span style="color: #F8F8F2">();</span></span>
<span class="line"><span style="color: #F8F8F2">$result</span><span style="color: #FF79C6">-&gt;</span><span style="color: #50FA7B">output</span><span style="color: #F8F8F2">();</span></span>
<span class="line"><span style="color: #F8F8F2">$result</span><span style="color: #FF79C6">-&gt;</span><span style="color: #50FA7B">errorOutput</span><span style="color: #F8F8F2">();</span></span>
<span class="line"><span style="color: #F8F8F2">$result</span><span style="color: #FF79C6">-&gt;</span><span style="color: #50FA7B">throw</span><span style="color: #F8F8F2">();</span></span>
<span class="line"><span style="color: #F8F8F2">$result</span><span style="color: #FF79C6">-&gt;</span><span style="color: #50FA7B">throwIf</span><span style="color: #F8F8F2">(</span><span style="color: #BD93F9">condition</span><span style="color: #F8F8F2">);</span></span>
<span class="line"></span></code></pre></div>



<p class="wp-block-paragraph">Process Interaction giúp chúng ta:</p>



<ul class="wp-block-list">
<li>Xử lý đầu ra của&nbsp;<strong>process</strong>&nbsp;khi nhận được</li>



<li>Thiết lập&nbsp;<strong>Process</strong>&nbsp;không đồng bộ</li>



<li>Tạo ra nhóm các&nbsp;<strong>process</strong></li>



<li>Các tính năng testing phong phú thông qua&nbsp;<strong>fake</strong>()</li>



<li>Ngăn chặn ngoại lệ trong quá trình testing</li>
</ul>



<p class="wp-block-paragraph">Process là một tính năng mới rất được đầu tư với nhiều phương thức và option được cung cấp. Bạn có thể tìm hiểu chi tiết ở&nbsp;<a rel="noreferrer noopener" href="https://laravel.com/docs/10.x/processes" target="_blank">docs về phần này của Laravel</a></p>



<h2 id="cung-cap-1-package-moi-laravel-pennant" class="wp-block-heading">Cung cấp 1 package mới &#8211; Laravel Pennant</h2>



<p class="wp-block-paragraph">Laravel Pennant cung cấp một cách tiếp cận gọn nhẹ, được sắp xếp hợp lý để quản lý các cờ tính năng của ứng dụng của bạn.</p>



<p class="wp-block-paragraph">Nó cho phép chúng ra tự tin triển khai dần dần các tính năng ứng dụng mới, thử nghiệm các thiết kế giao diện mới.</p>



<p class="wp-block-paragraph">Bạn có thể tìm hiểu chi tiết nó trong&nbsp;<a href="https://laravel.com/docs/10.x/pennant#main-content" target="_blank" rel="noreferrer noopener">docs của Laravel 10</a>.</p>
<p>The post <a href="https://blog.tomosia.com.vn/nhung-cap-nhat-trong-laravel-10/">Những cập nhật trong Laravel 10</a> appeared first on <a href="https://blog.tomosia.com.vn">Tomoshare</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.tomosia.com.vn/nhung-cap-nhat-trong-laravel-10/feed/</wfw:commentRss>
			<slash:comments>7</slash:comments>
		
		
			</item>
		<item>
		<title>Hướng dẫn cấu hình Basic Authentication trên Nginx</title>
		<link>https://blog.tomosia.com.vn/huong-dan-cau-hinh-basic-authentication-tren-nginx/</link>
					<comments>https://blog.tomosia.com.vn/huong-dan-cau-hinh-basic-authentication-tren-nginx/#comments</comments>
		
		<dc:creator><![CDATA[Việt Nguyễn]]></dc:creator>
		<pubDate>Tue, 26 Sep 2023 21:43:32 +0000</pubDate>
				<category><![CDATA[Web Server]]></category>
		<category><![CDATA[centos]]></category>
		<category><![CDATA[ubuntu]]></category>
		<category><![CDATA[basic auth]]></category>
		<category><![CDATA[nginx]]></category>
		<guid isPermaLink="false">https://blog.tomosia.com.vn/?p=45</guid>

					<description><![CDATA[<p>Trong quá trình phát triển web, có những lúc chúng ta sẽ cần phải giới hạn người dùng&#8230;</p>
<p>The post <a href="https://blog.tomosia.com.vn/huong-dan-cau-hinh-basic-authentication-tren-nginx/">Hướng dẫn cấu hình Basic Authentication trên Nginx</a> appeared first on <a href="https://blog.tomosia.com.vn">Tomoshare</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Trong quá trình phát triển web, có những lúc chúng ta sẽ cần phải giới hạn người dùng truy cập đến website của mình và để giới hạn chúng ta có thể yêu cầu người dùng xác thực qua&nbsp;<code>tài khoản</code>&nbsp;và&nbsp;<code>mật khẩu</code>.</p>



<p class="wp-block-paragraph">Bài viết này sẽ hướng dẫn cho bạn các bước để cấu hình <a rel="noreferrer noopener" href="https://docs.nginx.com/nginx/admin-guide/security-controls/configuring-http-basic-authentication/" target="_blank"><strong>Basic Authentication</strong></a> bảo vệ server <a rel="noreferrer noopener" href="https://www.nginx.com/" target="_blank"><strong>Nginx</strong></a> chạy trên môi trường CentOS và Ubuntu Server.</p>



<h2 id="1-cai-dat-htpasswd" class="wp-block-heading">1. Cài đặt htpasswd</h2>



<p class="wp-block-paragraph">Tiến hành cài gói <strong>apache2-utils</strong> (Debian, Ubuntu) hoặc <strong>httpd-tools</strong> (CentOS)</p>



<p class="wp-block-paragraph"><strong>Ubuntu, Debian:</strong></p>



<pre class="wp-block-preformatted">sudo apt-get update 
sudo apt-get install apache2-utils </pre>



<p class="wp-block-paragraph"><strong>CentOS</strong>:</p>



<pre class="wp-block-preformatted">sudo yum install httpd-tools </pre>



<h2 id="2-tao-password-file" class="wp-block-heading">2. Tạo Password File</h2>



<p class="wp-block-paragraph">Sau khi htpasswd được cài đặt, hãy tạo file mật khẩu bằng câu lệnh sau với flag -c nếu file <strong>&#8220;.htpasswd&#8221;</strong> chưa tồn tại:</p>



<pre class="wp-block-preformatted">sudo htpasswd -c /etc/nginx/.htpasswd username </pre>



<p class="wp-block-paragraph">Thay thế <strong>&#8220;username&#8221;</strong> với tên đăng nhập bạn mong muốn. Sẽ có prompt chờ bạn nhập thông tin cho user trên</p>



<p class="wp-block-paragraph">Lưu ý: nếu đã có file  <strong>/etc/nginx/.htpass</strong>wd rồi thì KHÔNG sử dụng <strong>flag -c</strong></p>



<pre class="wp-block-preformatted">sudo htpasswd /etc/nginx/.htpasswd tomosia-admin</pre>



<p class="wp-block-paragraph">Nếu user tomosia-admin đã tồn tại thì lệnh trên sẽ cập nhật lại password</p>



<h2 id="3-cau-hinh-xac-thuc-mat-khau-cho-nginx" class="wp-block-heading">3. Cấu hình xác thực mật khẩu cho Nginx</h2>



<p class="wp-block-paragraph">Mở tệp cấu hình nginx của bạn, thường nó sẽ nằm ở đường dẫn <strong>/etc/nginx/nginx.conf</strong> hoặc cấu hình cho 1 site nhất định tại <strong>/etc/nginx/sites-available/example.com</strong> hoặc <strong>/etc/nginx/conf.d/example.com</strong>. Sau đó thêm dòng sau vào file cấu hình</p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#282A36"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" data-code="auth_basic &quot;Restricted Access&quot;;
auth_basic_user_file /etc/nginx/.htpasswd;" style="color:#F8F8F2;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dracula" style="background-color: #282A36" tabindex="0"><code><span class="line"><span style="color: #FF79C6">auth_basic </span><span style="color: #F1FA8C">&quot;Restricted Access&quot;</span><span style="color: #F8F8F2">;</span></span>
<span class="line"><span style="color: #FF79C6">auth_basic_user_file </span><span style="color: #F8F8F2">/etc/nginx/.htpasswd;</span></span></code></pre></div>



<p class="wp-block-paragraph">Nếu muốn thiết lập basic auth cho toàn bộ website trên server thì cần thêm vào khối <strong>http</strong></p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#282A36"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" data-code="http {
   ...
   auth_basic &quot;Restricted Access!&quot;; 
   auth_basic_user_file /etc/nginx/.htpasswd;
   ...
}" style="color:#F8F8F2;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dracula" style="background-color: #282A36" tabindex="0"><code><span class="line"><span style="color: #FF79C6">http</span><span style="color: #F8F8F2"> {</span></span>
<span class="line"><span style="color: #F8F8F2">   ...</span></span>
<span class="line"><span style="color: #F8F8F2">  </span><span style="color: #FF79C6"> auth_basic </span><span style="color: #F1FA8C">&quot;Restricted Access!&quot;</span><span style="color: #F8F8F2">; </span></span>
<span class="line"><span style="color: #F8F8F2">  </span><span style="color: #FF79C6"> auth_basic_user_file </span><span style="color: #F8F8F2">/etc/nginx/.htpasswd;</span></span>
<span class="line"><span style="color: #F8F8F2">   ...</span></span>
<span class="line"><span style="color: #F8F8F2">}</span></span></code></pre></div>



<p class="wp-block-paragraph">Nếu muốn thiết lập cho một website hoặc domain nhất định cần thêm vào khối <strong>server</strong> tương ứng</p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#282A36"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" data-code="server {
    ...
    auth_basic &quot;Restricted Access!&quot;;
    auth_basic_user_file /etc/nginx/.htpasswd;
    ...
}" style="color:#F8F8F2;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dracula" style="background-color: #282A36" tabindex="0"><code><span class="line"><span style="color: #FF79C6">server</span><span style="color: #F8F8F2"> {</span></span>
<span class="line"><span style="color: #F8F8F2">    ...</span></span>
<span class="line"><span style="color: #F8F8F2">   </span><span style="color: #FF79C6"> auth_basic </span><span style="color: #F1FA8C">&quot;Restricted Access!&quot;</span><span style="color: #F8F8F2">;</span></span>
<span class="line"><span style="color: #F8F8F2">   </span><span style="color: #FF79C6"> auth_basic_user_file </span><span style="color: #F8F8F2">/etc/nginx/.htpasswd;</span></span>
<span class="line"><span style="color: #F8F8F2">    ...</span></span>
<span class="line"><span style="color: #F8F8F2">}</span></span></code></pre></div>



<p class="wp-block-paragraph">Nếu muốn thiết lập cho một location nhất định hãy thêm vào khối <strong>location</strong></p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#282A36"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" data-code="location /swagger-ui/ {
    ...
    auth_basic &quot;Restricted Access!&quot;;
    auth_basic_user_file /etc/nginx/.htpasswd;
    ...
}" style="color:#F8F8F2;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dracula" style="background-color: #282A36" tabindex="0"><code><span class="line"><span style="color: #FF79C6">location</span><span style="color: #F8F8F2"> /swagger-ui/ {</span></span>
<span class="line"><span style="color: #F8F8F2">    ...</span></span>
<span class="line"><span style="color: #F8F8F2">   </span><span style="color: #FF79C6"> auth_basic </span><span style="color: #F1FA8C">&quot;Restricted Access!&quot;</span><span style="color: #F8F8F2">;</span></span>
<span class="line"><span style="color: #F8F8F2">   </span><span style="color: #FF79C6"> auth_basic_user_file </span><span style="color: #F8F8F2">/etc/nginx/.htpasswd;</span></span>
<span class="line"><span style="color: #F8F8F2">    ...</span></span>
<span class="line"><span style="color: #F8F8F2">}</span></span></code></pre></div>



<h2 id="4-restart-nginx" class="wp-block-heading">4. Restart Nginx</h2>



<pre class="wp-block-preformatted">sudo service nginx reload #debian/ubuntu
sudo systemctl restart nginx #redhat/centos</pre>



<h2 id="5-kiem-tra" class="wp-block-heading">5. Kiểm tra</h2>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="793" height="468" src="http://blog.tomosia.com.vn/wp-content/uploads/2023/10/image.png" alt="" class="wp-image-282" srcset="https://blog.tomosia.com.vn/wp-content/uploads/2023/10/image.png 793w, https://blog.tomosia.com.vn/wp-content/uploads/2023/10/image-300x177.png 300w, https://blog.tomosia.com.vn/wp-content/uploads/2023/10/image-768x453.png 768w, https://blog.tomosia.com.vn/wp-content/uploads/2023/10/image-380x224.png 380w" sizes="auto, (max-width: 793px) 100vw, 793px" /></figure>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph"></p>
<p>The post <a href="https://blog.tomosia.com.vn/huong-dan-cau-hinh-basic-authentication-tren-nginx/">Hướng dẫn cấu hình Basic Authentication trên Nginx</a> appeared first on <a href="https://blog.tomosia.com.vn">Tomoshare</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.tomosia.com.vn/huong-dan-cau-hinh-basic-authentication-tren-nginx/feed/</wfw:commentRss>
			<slash:comments>16</slash:comments>
		
		
			</item>
	</channel>
</rss>
