一、安裝nginx前,我們首先要確保系統安裝了g++、gcc、openssl-devel、pcre-devel和zlib-devel軟件,可通過如圖所示命令進行檢測,如果以安裝我們可以通過圖二所示卸載:
yum install gcc-c++ yum -y install zlib zlib-devel openssl openssl--devel pcre pcre-devel ## 如果已安裝,則remove掉 yum remove nginx
wget https://nginx.org/download/nginx-1.11.3.tar.gz
我們一般安裝linux軟件都會在/usr/local目錄下,然后進行解壓編譯安裝:
tar -zxvf nginx-1.11.3.tar.gz mv nginx-1.11.3 /usr/local/nginx-1.11.3
./configure --prefix=/usr/local/nginx ## 安裝到/usr/local/nginx的nginx目錄下
make
make install
此時安裝成功:
此時源碼包和安裝后的包都有了,進入到nginx目錄下,(一般要不要修改源碼包,再make make install,需要看修改什么)
如上,進入到sbin/nginx,啟動即可。
二、配置和說明:
接下來介紹下啟動/停止/重啟的具體方法,進入目錄后我們可以用執行sbin/nginx來啟動,也可以通過conf/nginx.conf來啟動,停止我們可以查詢進程使用kill -9 進程號/pkill -9 nginx來結束nginx服務,重啟可以通過 sbin/nginx -s reload來重啟,具體命令大家請看如圖所示
三、nginx的開發實例
在nginx.conf文件增加代碼
gzip on; include ../conf.d/*.conf;
這樣就可以在conf.d文件夾下添加配置文件,例如
server{ listen 80; server_name felab.**.com; root /home/project/RDFELabClient/; }
/usr/local/nginx/sbin/nginx -t試下是否配置有問題
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successfu
重啟綁定host就可以正式訪問了
四、把nginx設置全局變量
ln -s /usr/local/nginx/sbin/nginx /usr/sbin/ /usr/local/nginx/sbin/nginx是nginx的啟動命令 /usr/sbin/就是環境變量目錄
五、如果修改的配置在執行發生下面的錯誤
nginx: [error] invalid PID number "" in "/usr/local/nginx/logs/nginx.pid"或者修改配置不生效
service nginx restart #不生效
嘗試執行下
/usr/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
六、nginx的端口代理
server { listen 80; # 監聽端口 server_name npm.xxx.com; # 站點域名 index index.html index.htm index.php; # 默認導航頁 location / { proxy_pass http://127.0.0.1:4873/; proxy_redirect off; proxy_set_header X-Real-IP $remote_addr; #后端的Web服務器可以通過X-Forwarded-For獲取用戶真實IP proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; #以下是一些反向代理的配置,可選。 proxy_set_header Host $host; client_max_body_size 10m; client_body_buffer_size 128k; } location ~ ^/verdaccio/(.*)$ { proxy_pass http://127.0.0.1:4872/$1; proxy_set_header Host $host:$server_port; proxy_set_header X-Forwarded-For $remote_addr; proxy_set_header X-Forwarded-Proto $scheme; }
error_page 500 502 503 504 http://www.xxx.com/Errors.htm;
}
七、websocket的配置
如果報“failed: Error during WebSocket handshake: Unexpected response code: 400”錯誤,可能是nginx的配置關鍵參數沒有。
server{ listen 80; server_name fedata.xxx.com; location / { proxy_pass http://127.0.0.1:7002; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "Upgrade"; proxy_set_header X-Real-IP $remote_addr; proxy_set_header Host $host; } }
proxy_set_header Upgrade
把代理時http請求頭的
Upgrade
設置為原來http請求的請求頭,ws協議的請求頭為
websocket
proxy_set_header Connection
因為代理的ws協議,所以http請求頭的
Connection
設置為
Upgrade
proxy_set_header X-Real-IP
給代理設置原http請求的ip,填寫
$remote_addr
即可
至於websocket協議的response的參數,在反向代理的時候不用管。
到這里,Nginx反向代理webSocket的配置就完成了,重啟Nginx,用websocket連接試試,如果websocket成功連接,說明Nginx反向代理websocket已經成功了.
8、nginx 的upsteam實現負載
upstream app.**.com { server backend1.example.com weight=5; server 127.0.0.1:8080 max_fails=3 fail_timeout=30s; server unix:/tmp/backend3; server backup1.example.com:8080 backup; } server { listen 80; server_name app.**.com; access_log /home/nginx/logs/app.xueersi.com_access.log main; error_page 500 502 503 504 http://www.xueersi.com/wait.html; # include /home/openresty/nginx/conf/nconf/xueersissl.conf; location / { set $upstream 'app.**.com'; proxy_pass http://$upstream; add_header 'Access-Control-Allow-Origin' '$http_origin'; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_redirect off; client_max_body_size 500m; client_body_buffer_size 128k; proxy_ignore_client_abort on; proxy_connect_timeout 60; proxy_send_timeout 60; proxy_read_timeout 60; proxy_buffer_size 128k; proxy_buffers 32 32k; proxy_busy_buffers_size 128k; proxy_temp_file_write_size 128k; proxy_next_upstream off; add_header Xes-App $upstream_http_server; } }
weight
=number
設定服務器的權重,默認是1。max_fails
=number
設定Nginx與服務器通信的嘗試失敗的次數。在fail_timeout
參數定義的時間段內,如果失敗的次數達到此值,Nginx就認為服務器不可用。在下一個fail_timeout
時間段,服務器不會再被嘗試。 失敗的嘗試次數默認是1。設為0就會停止統計嘗試次數,認為服務器是一直可用的。