Nginx經常使用命令與配置

1、nginx安裝

一、本地安裝

  • windows系統
直接去官網: https://nginx.org/en/download... 下載相應版本便可。
  • mac系統
$ brew install nginx

二、Linux安裝:

以centOS系統爲例,有下面兩種安裝方式(推薦1)

1.) 經過rpm鏡像源安裝javascript

$ rpm -ivh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm
$ yum install -y nginx

2.) 經過依賴包詳細安裝css

安裝nginx依賴庫pcre、zlib
$ yum install pcre pcre-devel  
$ yum install zlib zlib-devel
若有必要,能夠安裝c++編譯環境和openssl
$ yum install gcc-c++
$ yum install openssl openssl-devel
下載/編譯nginx
$ wget -c https://nginx.org/download/nginx-1.16.0.tar.gz
$ tar -zxvf nginx-1.16.0.tar.gz

# 編譯安裝
$ cd nginx-1.16.0
$ ./configure  # 默認安裝在/usr/local/nginx 
$ make && make install

# 建立軟鏈
$ ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/nginx
$ nginx -v

2、nginx命令

# windows啓動
> start nginx

# linux/mac啓動
$ service nginx start

# 手動指定配置
$ nginx -c /usr/local/nginx/conf/nginx.conf

# -p指定nginx運行目錄(日誌存儲位置)
$ nginx -c /path/nginx.conf -p /path/

# 重啓
$ nginx -s reload

# 關閉
$ nginx -s stop

# 查看端口
$ netstat -an | grep 端口  # linux/mac系統
> netstat -an | findstr 端口  # windows系統

# 測試web服務
$ curl -i 主機:端口
# 或
$ telnet 主機 端口

# 查看進程
$ ps -ef | grep nginx

# 查看錯誤日誌
$ tail -30 /var/log/nginx/error.log

3、nginx配置

查看nginx.conf配置文件位置
$ nginx -t

一、建立一個標準的server

確保nginx.conf裏的 include conf.d/*.conf 已啓用,沒有則添加一條
在conf.d目錄下新建server.conf文件,配置以下:
server {
    listen       80;
    server_name  127.0.0.1;

    client_max_body_size    100m;
    
    location / {
        root   /app/xxx;  # 項目所在目錄
        index  index.html index.htm;
        try_files  $uri $uri/ /index.html;  # vue單頁應用須要路由始終指向index.html
    }
}

二、配置ssl證書實現https訪問

複製.pem和.key兩種證書到當前server配置同一個目錄下
server {
    listen       443;
    server_name  127.0.0.1;
    ssl on;
    ssl_certificate             my.pem;    # 替換成本身的證書
    ssl_certificate_key         my.key;    # 替換成本身的證書
    ssl_session_timeout         5m;
    ssl_protocols SSLv3 TLSv1.2;
    ssl_ciphers ECDHE-RSA-AES256-SHA384:AES256-SHA256:RC4:HIGH:!MD5:!aNULL:!eNULL:!NULL:!DH:!EDH:!AESGCM;
    ssl_prefer_server_ciphers   on;

    location / {}
}

三、api接口反向代理

location /api {
        proxy_pass   http://b.domain.com:9000;  # 最終地址會加上/api,變成 /api/xxx
        #proxy_cookie_domain   b.domain.com a.domain.com; # 須要修改接口返回的cookie域名時使用
    }
須要注意的是,proxy_pass路徑有相對和絕對之分,如:proxy_pass http://b.domain.com:9000/; # 最終地址會替掉/api,變成 /xxx

四、upstream負載均衡

upstream apiServer { 
    server 10.0.0.80:5000;  # 若是須要權重加 weight=數字
    server 10.0.0.81:5000;
}
server {
    listen       80;
    server_name  127.0.0.1;

    location /api {
        proxy_pass   http://apiServer;
    }
}

須要注意的是:html

upstream名稱不該包含下劃線,由於在某些條件下,當成主機名傳給後端Java應用,會被當作域名來解析,結果返回Null,容易觸發服務器內部錯誤。建議: 使用駝峯命名規範

五、容許它站跨域訪問

在location /api {}裏添加如下項:vue

add_header Access-Control-Allow-Origin *;  # *表示容許全部站跨域訪問(不安全,建議指定具體容許的域名如:http://b.domain.com:9000(注意格式:http(s):// + domain + port,末尾也不能加/)
add_header Access-Control-Allow-Credentials true;  #此項爲容許帶cookie跨域訪問,若設置true,上面域名配置不能爲*,必須指定具體域名

六、iframe同源策略限制

能夠經過nginx配置,限制它站經過iframe嵌入訪問本站, 不加配置默認是容許訪問
# 限制爲同源可用
add_header X-Frame-Options SAMEORIGIN

# 指定網站可用
add_header X-Frame-Options "ALLOW-FROM http://xxx.com:8000";
add_header Content-Security-Policy "frame-ancestors http://xxx.com:8000"; # 兼容chrome

七、開啓gzip壓縮

gzip字段設置on,並設置哪些類型文件須要壓縮:java

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

    gzip             on;
    gzip_min_length  10k;
    gzip_comp_level  5;
    gzip_types       text/plain text/css application/x-javascript application/javascript text/javascript;

    server {
        # ....
    }

八、其它問題

1.) 訪問服務報403權限linux

須要修改nginx.conf裏的user,好比user root;

2.) nginx重啓時報pid錯nginx

nginx: [error] invalid PID number "" in "/usr/local/nginx/logs/nginx.pid"

解決方案:使用nginx -c的參數指定nginx.conf文件的位置c++

# 新建nginx.pid
$ mkdir -p /usr/local/nginx/logs
$ touch /usr/local/nginx/logs/nginx.pid

# 指定配置文件
$ nginx -c /usr/local/nginx/conf/nginx.conf
相關文章
相關標籤/搜索