開發運維日記 (一) Nginx部署和內外網配置


本次案例很特別,來到新公司之后接手了一個項目。作為開發99%情況下都不需要過多考慮基礎設施的安裝配置,比如Nginx、keepalived、mysql等基礎設施安裝配置,故而通過以下幾篇日記來記錄項目上線所面臨的挑戰:

  (一) Nginx部署 和 內外網絡配置

  (二) keepalived實現VIP和nginx可用性檢查

  (三) Mysql高可用主從配置

1、安裝環境:centos7 Nginx 1.16.1
2、主機: 192.168.30.7 從機:192.168.30.8

 

(一) Nginx部署 和 內外網絡配置

1、安裝Nginx 具體安裝shell腳本 nginx_install.sh 


 

#!/bin/bash

echo 'begin install nginx'

yum -y install gcc pcre-devel zlib-devel openssl openssl-devel

tar -zxvf nginx-1.16.1.tar.gz

cd nginx-1.16.1

mkdir -p /var/application/nginx

./configure --prefix=/usr/local/nginx

make && make install

echo 'end install nginx'

 注意點:

(1)需要將nginx-1.16.1.tar.gz 和 nginx_install.sh放在一個目錄

(2)prefix=/usr/local/nginx 為自定義nginx的安裝目錄,可以自由指定

(3)/var/application/nginx存放nginx日志目錄,可以自由指定

 

2、網絡拓撲 和 nginx.conf 配置 


 網絡拓撲圖如下:

 nginx.conf 配置

#user  nobody;
worker_processes  1;

#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

#pid        logs/nginx.pid;


events {
    worker_connections  1024;
}


http {
    include       mime.types;
    default_type  application/octet-stream;

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"'
                      'rt=$request_time uct="$upstream_connect_time" uht="$upstream_header_time" urt="$upstream_response_time"';

    access_log  /var/application/nginx/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    #keepalive_timeout  0;
    keepalive_timeout  65;

    #gzip  on;

    # nginx ip: 192.168.30.7/8
    # vip: 192.168.30.77

    upstream myservice {
        server 192.168.30.7:8080;
        server 192.168.30.8:8080;
    }

    # 對外
    server {
            listen 80;
            listen [::]:80 default_server;

            #root /var/www/html;

            # Add index.php to the list if you are using PHP
            # index index.html index.htm index.nginx-debian.html;

			location / {
				root   html;
				index  index.html index.htm;
			}

            location /path/api/ {
                proxy_pass http://myservice;
                proxy_read_timeout 300;
                proxy_connect_timeout 300;

                proxy_set_header   X-Forwarded-Proto $scheme;
                proxy_set_header   Host              $http_host;
                proxy_set_header   X-Real-IP         $remote_addr;
                proxy_set_header   X-Forwarded-For   $proxy_add_x_forwarded_for;
            }

            location /path/ui/g-web/ {
                proxy_pass http://myservice;
                proxy_read_timeout 300;
                proxy_connect_timeout 300;

                proxy_set_header   X-Forwarded-Proto $scheme;
                proxy_set_header   Host              $http_host;
                proxy_set_header   X-Real-IP         $remote_addr;
                proxy_set_header   X-Forwarded-For   $proxy_add_x_forwarded_for;
            }
            # 靜態資源映射
            location /static/resource {
                alias /usr/app/static/resource/;
            }

            # 內網deny 
            location /path/api/inner {
                   deny all;
            }
            
            location /path/inner {
                   deny all;
            }
            
            location /path/ui {
                   deny all;
            }
    }

    # 對內
    server {
            listen 8000;
            listen [::]:8000;

            #root /var/www/html;

            # Add index.php to the list if you are using PHP
            #index index.html index.htm index.nginx-debian.html;


            location /path/ {
                proxy_pass http://myservice;
                proxy_read_timeout 300;
                proxy_connect_timeout 300;

                proxy_set_header   X-Forwarded-Proto $scheme;
                proxy_set_header   Host              $http_host;
                proxy_set_header   X-Real-IP         $remote_addr;
                proxy_set_header   X-Forwarded-For   $proxy_add_x_forwarded_for;
            }
    }

}
View Code

 

3、幾個值得注意的點:


 

(1)Nginx內網配置通過VIP訪問8000端口,實現web內網訪問控制。

(2)Nginx外網配置監聽80端口,由DNS 或者 F5等切入流量。

(3)虛擬IP(Vrtual IP Address),是一種不與特定計算機或者特定計算機網卡相對應的IP地址。所有發往這個IP地址的數據包最后都會經過真實的網卡到達目的主機的目的進程。虛擬IP比較常見的一個用例就是在系統高可用性(High Availability HA)方面的應用,通常一個系統會因為日常維護或者非計划外的情況而發生宕機,為了提高系統對外服務的高可用性,就會采用主備模式進行高可用性的配置。當提供服務的主機M宕機后,服務會切換到備用主機S繼續對外提供服務。而這一切用戶是感覺不到的,在這種情況下系統對客戶端提供服務的IP地址就會是一個虛擬IP,當主機M宕機后,虛擬IP便會漂浮到備機上,繼續提供服務。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM