# Nginx 設定方法 :house: [回筆記首頁](https://www.mirai.tw) ###### tags: `Ngix` `Proxy` `Reverse` [toc] ## Nginx ### 1. 移除原來的Web server: ```systemctl status``` 查一下是否已安裝web server,若有,請先將他移除, 移除方法如下:(以apache2為例) ```linux! systemctl stop apache2 #關閉web server(apache2) systemctl disable apache2 #卸載web server(apache2) apt remove apache2 #移除web server(apache2) systemctl status apache #如果是centos系列將apt換成yum ``` ### 2. 安裝 Nginx: ```linux! apt install nginx -y #如果是centos系列將apt換成yum systemctl enable nginx #裝載web server(apache2) systemctl start nginx #開啟web server(apache2) systemctl status nginx #查看是否成功 ``` ### 3. 設定 Nginx: /etc/nginx/conf.d (這個是用來放Global設定檔的) /etc/nginx/sites_available (這個是用來放單一網站設定檔的) /etc/nginx/sites_enabled (這個是nginx會讀取的目錄) 然後用 symblic link 將available中設好的設定檔連過enabled中即可,不用時將enabled中的link移除就好了,不必把整個設定檔刪除 例如: 新增一個設定檔 server1 nano /etc/nginx/sites_available/server1 ln -s /etc/nginx/sites_available/server1 /etc/nginx/sites-enabled nginx -t #測試設定檔是否正確 systemctl restart nginx ``` #server1 server { listen 80; listen [::]:80; server_name server1.com app1.com; root /home/user1/www; index index.html; } ``` ### 4. 設定 Nginx的 reverse proxy:這裡如果寫2個upstream就能負載平衡 ``` # reverse proxy 的設定範例 server { listen 1122; # 在 public ip中開啟的 port - forward 到 server 1 proxy_pass inner-server1; } upstream inner-server1 { server 192.168.1.11:22; # 內網中server1 ip 與 sshd port } ``` 參考資料: [Nginx原生變數]: https://blog.wangqi.love/articles/nginx/nginx%E6%95%B4%E7%90%86.html ### 5.Nginx中rewrite的範例 使用 rewrite 將 $request_uri 改寫。 http://host/article/show?id=4&type=php&cat=12 rewrite到 http://host/article/show/4?type=php&cat=12 ``` if($request_uri ~* "/article/show\?id=([0-9]+)&(.*)") { set $myid $1 set $myque $2 rewrite ^/ /article/show/$myid?$$myque? redirect; } ``` ### 6.Nginx Server中的$uri轉成內網的port範例 http://host/port/api/path_info?query_string 外網中\$URI host.port pass(reverse proxy)to host:port (port:8000~8499) http://localhost:port/api/path_info?query_string 內網中app的\$URI ``` server { listen 80; listen [::]:80; server_name server_dn1 server_dn2; #這邊改成server的doamin name root /home/kevin/www; index index.html; location / { if ($request_uri ~* "/([8][0-4][0-9][0-9])/(.*)") { set $myport $1; set $myuri $2; proxy_pass http://127.0.0.1:$myport/$myuri; } } } ``` ### 6.Nginx Server開啟使用者網頁範例 http://host/port/api/path_info?query_string 外網中\$URI host.port pass(reverse proxy)to host:port (port:8000~8499) http://localhost:port/api/path_info?query_string 內網中app的\$URI ``` server { listen 80; listen [::]:80; server_name server_dn1 server_dn2; #這邊改成server的doamin name root /home/kevin/www; index index.html; location / { if ($request_uri ~* "/([8][0-4][0-9][0-9])/(.*)") { set $myport $1; set $myuri $2; proxy_pass http://127.0.0.1:$myport/$myuri; } } location ~ ^/~(.+?)(/.*)?$ { alias /home/$1/www$2; index index.html index.htm; autoindex on; } } ``` Author: - [name=林奇賢]