# پیکربندی 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/)  قابل دسترسی می باشد.