# پیکربندی HA Proxy
اپلیکیشنی داریم با دو Endpoint:
| Endpoint | Status Code |
|-------------|-------------|
|/working | 200 |
|/not-working | 500 |
اپلیکیشن در حالت Debug Mode اجرا شده است و در صورت وجود خطا Stack Trace کد را نمایش میدهد.
در جلوی اپلیکیشن HA Proxy داریم که به عنوان Reverse Proxy و Load Balancer عمل می کند.
## شرح مسئله
نیاز داریم در صورتی که اپلیکیشن خطایی داشت به کاربر صفحه ی 403 نشان بدهیم، اما به برنامه نویسان و DevOps صفحه ی Stack Trace را نشان بدهیم که بتوانند مشکل را پیدا و حل بکند. برنامه نویسان و DevOps یک Header مخصوص برای این کار دارند.
| Header | Value |
|----------|----------------------|
|staff | f34ac726dd7486a22bc0 |
در صورت وجود این Header در ریکوئست باید به کاربر Stack Trace به صورت کامل نمایش داده شود.
**- شرایط تست**
تنظیمات HA Proxy به شرح زیر می باشد( فایل ها را از لینک انتهای صفحه دریافت نمایید):
```
# haproxy.cfg
global
user haproxy
group haproxy
daemon
defaults
log global
mode http
option httplog
option dontlognull
timeout connect 5000
timeout client 50000
timeout server 50000
errorfile 400 /usr/local/etc/haproxy/errors/400.http
errorfile 403 /usr/local/etc/haproxy/errors/403.http
errorfile 408 /usr/local/etc/haproxy/errors/408.http
errorfile 500 /usr/local/etc/haproxy/errors/500.http
errorfile 502 /usr/local/etc/haproxy/errors/502.http
errorfile 503 /usr/local/etc/haproxy/errors/503.http
errorfile 504 /usr/local/etc/haproxy/errors/504.http
frontend http
bind *:8888
use_backend app
backend app
server app1 api:5000
```
*نکته: برای نمایش 403 از errorfile 403 در HA Proxy استفاده شود*
دستور مربوط به انجام تست:
```
$ curl localhost:8888/working
It works
```
```
$ curl localhost:8888/not-working
<html><body><h1>403
Forbidden</h1>
Request
forbidden by administrative rules.
</body></html>
```
```
$ curl localhost:8888/not-working -H "staff: f34ac726dd7486a22bc0"
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Exception: test // Werkzeug Debugger</title>
<link rel="stylesheet" href="?__debugger__=yes&cmd=resource&f=style.css"
type="text/css">
<!-- We need to make sure this has a favicon so that the debugger does
not by accident trigger a request to /favicon.ico which might
change the application state. -->
<link rel="shortcut icon"
href="?__debugger__=yes&cmd=resource&f=console.png">
<script src="?__debugger__=yes&cmd=resource&f=jquery.js"></script>
<script src="?__debugger__=yes&cmd=resource&f=debugger.js"></script>
.
.
.
```
**نکته:** ورژن HA Proxy 2.3.4 مورد استفاده است
## نحوه ی ارسال جواب
تغییرات خودتان را در محیط تست اعمال کنید و سپس فایل های خود را به صورت zip شده با ساختار زیر ارسال نمایید.( فایل ها را از لینک انتهای صفحه دریافت نمایید)
```
├── api
│ ├── api.py
│ ├── Dockerfile
│ └── requirements.txt
├── docker-compose.yml
├── haproxy
│ ├── errors
│ │ ├── 400.http
│ │ ├── 403.http
│ │ ├── 408.http
│ │ ├── 500.http
│ │ ├── 502.http
│ │ ├── 503.http
│ │ └── 504.http
│ └── haproxy.cfg
```
**نکته: هنگام ارسال در فایل haproxy.cfg بخش backend سرور را تغییر ندهید**
```
server app1 api:5000
```
## دریافت فایل های محیط تست
فایل های مورد نیاز تست از طریق [این لینک](/problemset/assignments/4367/download_problem_initial_project/88642/) قابل دسترسی می باشد.