<em id="1rarx"><ins id="1rarx"></ins></em><sup id="1rarx"></sup>

<progress id="1rarx"><tr id="1rarx"></tr></progress>
<sup id="1rarx"><menu id="1rarx"></menu></sup>
<menuitem id="1rarx"></menuitem><optgroup id="1rarx"><small id="1rarx"><sub id="1rarx"></sub></small></optgroup>

    <sup id="1rarx"><menu id="1rarx"></menu></sup>
    <div id="1rarx"></div><div id="1rarx"><tr id="1rarx"><object id="1rarx"></object></tr></div>
      <em id="1rarx"></em>

          存檔

          ‘nginx’ 分類的存檔

          免費域名證書+nginx開啟https訪問

          2018年4月7日 2 條評論

          越來越多的網站開始啟用https訪問,包括谷歌也表示提升https網站在搜索結果中的排名。

          開啟https首先需要有域名證書,大多都是要收費的,個人站在使用let‘s encrypt的免費證書就可以。

          本站的證書效果:

          生成辦法:
          第一步 下載域名證書工具

          第二步 生成證書,只需修改郵箱 網站根目錄 域名就可以了。

          執行生成證書命令前需要在nginx支持網站所有權驗證
          2.1 增加隱藏目錄訪問

          2.2 生成域名證書

          第三步 修改nginx 配置支持https方式訪問

          上一步生成的證書

          /etc/letsencrypt/live/www.4693749.com/fullchain.pem
          /etc/letsencrypt/live/www.4693749.com/privkey.pem

          第四步 定時更新證書
          crontab 中增加定時任務,每15天更新一次證書
          Let's Encrypt證書是有效期90天的,需要我們自己手工更新續期才可以

          分類: nginx 標簽:

          如何在ubuntu 16.04 上安裝Nginx

          2017年12月9日 4 條評論

          概述

          Nginx 是世界上最受歡迎的web服務器,許多大流量的主機都采用Nginx作為服務器。在大多數場景下作為web服務器的Nginx比Apache更加節省資源,它也可當作反向代理服務器。

          本文主要介紹如何在ubuntu16.04上安裝Nginx

          前提條件

          開始以前,你需要有一個安裝好的ubuntu16.04,并且你需要有一個擁有sudo權限的非root普通用戶。

          第一步:安裝Nginx

          Ubuntu默認的源中就有Nginx,所以安裝是比較簡單的。

          首先,更新apt源,以便軟件是最新的,然后就可以安裝nginx:

          • sudo apt-get update
          • sudo apt-get install nginx

          執行這兩個命令之后,apt-get就會安裝好Nginx和它依賴的軟件。

          第二步:配置防火墻

          開始測試Nginx前,我們需要配置防火墻,以便允許外界訪問nginx服務。Nginx在安裝的時候使用ufw注冊自己作為一個服務,這樣對nginx的訪問就會變得很容易。

          顯示所有ufw應用的配置:

          sudo ufw app list

          你可以得到一個配置的輸出列表:

          我們可以看到,有三個Nginx的配置:

          • Nginx Full: 這個配置打開 80端口和443端口
          • Nginx HTTP: 這個配置只打開80 (普通, 未加密通信)
          • Nginx HTTPS: 這個配置只打開 443 (TLS/SSL 加密通信 )

          一般來說我們應該配置最嚴的限制,因為本文我們還沒有配置SSL,所以我們只打開80端口。

          我們執行:

          驗證修改狀態:

          我們可以看到HTTP是被打開的:

          第三步: 檢查你的web server

          安裝完成后,Ubuntu 16.04 會自動啟動 Nginx. 我們可以使用systemd?檢查運行狀態:

          輸出

          服務已經正常啟動,當然最好的確認方法是通過訪問web頁面的方式。

          如果我們能訪問到默認加載頁就證明啟動成功了。

          如果你不知道服務器的ip可以使用如下命令:

           

          有了IP之后,在瀏覽器里輸入:

          http://server_domain_or_IP

          你就能看到Nginx的默認加載頁了:

          Nginx default page

          第四步: 管理 Nginx 進程

          現在我們已經有nginx在運行了,我們可以再試一些管理命令:

          停止nginx:

          啟動nginx:

          重啟nginx:

          修改配置文件后,平滑加載配置命令(不會斷開用戶訪問):

          默認,nginx是隨著系統啟動的時候自動運行。如果你不想開機啟動,那么你可以禁止nginx開機啟動:

          重新配置nginx開機自動啟動:

          第五步: 熟悉Nginx的文件和目錄

          現在我們已經管理nginx了,接下來可以熟悉一下nginx的目錄結構和一些重要的文件:

          網站文件位置

              • /var/www/html: 網站文件存放的地方, 默認只有我們上面看到nginx頁面,可以通過改變nginx配置文件的方式來修改這個位置。

          服務器配置

              • /etc/nginx: nginx配置文件目錄。所有的nginx配置文件都在這里。
              • /etc/nginx/nginx.conf: Nginx的主配置文件. 可以修改他來改變nginx的全局配置。
              • /etc/nginx/sites-available/: 這個目錄存儲每一個網站的"server blocks"。nginx通常不會使用這些配置,除非它們陪連接到 ?sites-enabled?目錄 (see below)。一般所有的server block 配置都在這個目錄中設置,然后軟連接到別的目錄 。
              • /etc/nginx/sites-enabled/: 這個目錄存儲生效的 "server blocks" 配置. 通常,這個配置都是鏈接到 sites-available目錄中的配置文件
              • /etc/nginx/snippets: 這個目錄主要可以包含在其它nginx配置文件中的配置片段。重復的配置都可以重構為配置片段。

          日志文件

            • /var/log/nginx/access.log: 每一個訪問請求都會記錄在這個文件中,除非你做了其它設置。
            • /var/log/nginx/error.log: 任何Nginx的錯誤信息都會記錄到這個文件中。
          分類: nginx 標簽: ,

          nginx的location、root、alias指令用法和區別

          2017年4月4日 7 條評論

          nginx指定文件路徑有兩種方式root和alias,指令的使用方法和作用域:
          [root]
          語法:root path
          默認值:root html
          配置段:http、server、location、if
          [alias]
          語法:alias path
          配置段:location

          root與alias主要區別在于nginx如何解釋location后面的uri,這會使兩者分別以不同的方式將請求映射到服務器文件上。
          root的處理結果是:root路徑+location路徑
          alias的處理結果是:使用alias路徑替換location路徑
          alias是一個目錄別名的定義,root則是最上層目錄的定義。
          還有一個重要的區別是alias后面必須要用“/”結束,否則會找不到文件的。。。而root則可有可無~~

          root實例:

          如果一個請求的URI是/t/a.html時,web服務器將會返回服務器上的/www/root/html/t/a.html的文件。

          alias實例:

          如果一個請求的URI是/t/a.html時,web服務器將會返回服務器上的/www/root/html/new_t/a.html的文件。注意這里是new_t,因為alias會把location后面配置的路徑丟棄掉,把當前匹配到的目錄指向到指定的目錄。

          注意:
          1. 使用alias時,目錄名后面一定要加"/"。
          3. alias在使用正則匹配時,必須捕捉要匹配的內容并在指定的內容處使用。
          4. alias只能位于location塊中。(root可以不放在location中)

          分類: nginx 標簽:

          nginx反向代理獲取用戶真實ip

          2017年3月5日 2 條評論

          nginx做反向代理時,默認的配置后端獲取到的ip都是來自于nginx,那么如何轉發用戶的真實IP到后端程序呢?
          當前端使用nginx代理,后端使用php-fpm時,如果還是使用$_SERVER['REMOTE_ADDR'],那么php程序獲取到的是nginx的ip地址,而不是用戶的真實ip。

          在nginx的配置文件中加入下面三個指令,這樣后端php就可以使用$_SERVER['HTTP_X_REAL_IP']獲取到訪客的ip。

          如果你想使用$_SERVER['REMOTE_ADDR'],不想修改代碼,那么可以通過修改REMOTE_ADDR的值來實現。

          經過多層代理后 $http_x_forwared_for 會含有多個ip,其中第一個ip是客戶端的ip,REMOTE_ADDR只能是客戶端的ip,所以可以用正則提取 $http_x_forwarded_for的第一個ip給REMOTE_ADDR:

          分類: nginx 標簽:

          nginx 的 access log rewrite log 日志配置

          2017年3月5日 沒有評論

          nginx 的 rewrite log 是記錄在 error log 文件中,而不是access log中。
          nginx 開啟 rewrite 的方法(在server段中添加):
          首先,打開 error_log 日志

          然后打開 rewrite_log 開關

          這樣就可以在 error.log 中生成重寫的 rewrite 日志。

          當server段不指定access_log時,并且http段中也未指定任何access_log參數時,它會默認寫到logs/access.log這個文件,也就是access_log默認值就是logs/access.log,而且是所有server的訪問日志。
          如果我們不需要,在http段中加一行access_log off;然后在特定的server中配置自己想寫入的日志。

          nginx的http段中,設置access log:

          nginx有一個非常靈活的日志記錄模式。每個級別的配置可以有各自獨立的訪問日志。日志格式通過log_format命令來定義。

          1. access_log指令

          語法: access_log path [format [buffer=size [flush=time]]];
          access_log path format gzip[=level] [buffer=size] [flush=time];
          access_log syslog:server=address[,parameter=value] [format];
          access_log off;
          默認值: access_log logs/access.log combined;
          配置段: http, server, location, if in location, limit_except
          gzip壓縮等級。
          buffer設置內存緩存區大小。
          flush保存在緩存區中的最長時間。
          不記錄日志:access_log off;
          使用默認combined格式記錄日志:access_log logs/access.log 或 access_log logs/access.log combined;

          2. log_format指令

          語法: log_format name string …;
          默認值: log_format combined “…”;
          配置段: http
          name表示格式名稱,string表示等義的格式。log_format有一個默認的無需設置的combined日志格式,相當于apache的combined日志格式,如下所示:

          如果nginx位于負載均衡器,squid,nginx反向代理之后,web服務器無法直接獲取到客戶端真實的IP地址了。 $remote_addr獲取反向代理的IP地址。反向代理服務器在轉發請求的http頭信息中,可以增加X-Forwarded-For信息,用來記錄 客戶端IP地址和客戶端請求的服務器地址。

          日志格式允許包含的變量注釋如下:

          發送給客戶端的響應頭擁有“sent_http_”前綴。 比如$sent_http_content_range。
          實例如下:

          3. open_log_file_cache指令

          語法: open_log_file_cache max=N [inactive=time] [min_uses=N] [valid=time];
          open_log_file_cache off;
          默認值: open_log_file_cache off;
          配置段: http, server, location
          對于每一條日志記錄,都將是先打開文件,再寫入日志,然后關閉。可以使用open_log_file_cache來設置日志文件緩存(默認是off),格式如下:
          參數注釋如下:
          max:設置緩存中的最大文件描述符數量,如果緩存被占滿,采用LRU算法將描述符關閉。
          inactive:設置存活時間,默認是10s
          min_uses:設置在inactive時間段內,日志文件最少使用多少次后,該日志文件描述符記入緩存中,默認是1次
          valid:設置檢查頻率,默認60s
          off:禁用緩存
          實例如下:

          4. log_not_found指令

          語法: log_not_found on | off;
          默認值: log_not_found on;
          配置段: http, server, location
          是否在error_log中記錄不存在的錯誤。默認是。

          5. log_subrequest指令

          語法: log_subrequest on | off;
          默認值: log_subrequest off;
          配置段: http, server, location
          是否在access_log中記錄子請求的訪問日志。默認不記錄。

          6. rewrite_log指令

          由ngx_http_rewrite_module模塊提供的。用來記錄重寫日志的。對于調試重寫規則建議開啟。 Nginx重寫規則指南
          語法: rewrite_log on | off;
          默認值: rewrite_log off;
          配置段: http, server, location, if
          啟用時將在error log中記錄notice級別的重寫日志。

          7. error_log指令

          語法: error_log file | stderr | syslog:server=address[,parameter=value] [debug | info | notice | warn | error | crit | alert | emerg];
          默認值: error_log logs/error.log error;
          配置段: main, http, server, location
          配置錯誤日志。

          分類: nginx 標簽: , ,

          nginx開啟https

          2017年2月15日 1 條評論

          開啟https配置

          #下面是http跳轉至https

          分類: nginx 標簽:

          nginx解決跨域

          2017年1月22日 3 條評論

          什么是跨域?

          使用js獲取數據時,涉及到的兩個url只要協議、域名、端口有任何一個不同,都被當作是不同的域,相互訪問就會有跨域問題。
          例如客戶端的域名是www.redis.com.cn,而請求的域名是www.264.cn
          如果直接使用ajax訪問,會有以下錯誤
          XMLHttpRequest cannot load http://www.264.cn/server.php. No 'Access-Control-Allow-Origin' header is present on the requested resource.Origin 'http://www.redis.com.cn' is therefore not allowed access.

          如何解決跨域?

          在服務器頁面的Response header中加入如下內容,可以實現POST跨域。
          // 指定允許其他域名訪問
          header('Access-Control-Allow-Origin:*');
          // 響應類型
          header('Access-Control-Allow-Methods:POST');
          // 響應頭設置
          header('Access-Control-Allow-Headers:x-requested-with,content-type');

          Access-Control-Allow-Origin:* 表示允許任何域名跨域訪問
          如果需要指定某域名才允許跨域訪問,只需把Access-Control-Allow-Origin:*改為Access-Control-Allow-Origin:允許的域名
          例如:header('Access-Control-Allow-Origin:http://www.redis.com.cn');

           

          1.nginx配置文件增加響應頭

          在服務器端的nginx.conf中配置增加配置

          這樣就可以實現GET,POST,OPTIONS的跨域請求的支持

          2.修改php代碼加入響應頭

          例如,server.php 路徑:http://www.264.cn/server.php

          3.修改客端的nginx配置,利用反向代理來實現

          例如,www.redis.com.cn/html/request.html 想請求www.264.cn/api/msg?method=1&para=2;

          變成訪問本地域名地址

          通過nginx中增加location反向代理到服務器端

           

           

          分類: nginx 標簽:

          iis監聽指定ip配置,iis和nginx共存

          2016年11月30日 沒有評論

          服務器增加ip之后,默認都監聽在80端口,這樣新加的ip就不能供nginx使用。

          打開cmd, netstat -aon

          你會看見 TCP 0.0.0.0:80 或者id為4的進程監聽在80端口

          解決辦法:
          1.下載httpcfg.exe

          http://www.microsoft.com/downloads/details.aspx?FamilyID=96a35011-fd83-419d-939b-9a772ea2df90&displaylang=en

          2.查看系統監聽情況,打開cmd之行

          輸出結果

          這表示沒有監聽,給iis綁定指定ip

          執行結果,表示設置正確
          HttpQueryServiceConfiguration completed with 0.

          重啟iis服務器

          現在iis只監聽在我們指定的ip xxx.xxx.xxx.xxx上,新的ip可以供nginx或者apache使用了。

          iis7可以使用netsh http add iplisten ipaddress=xxx.xxx.xxx.xxx

          分類: nginx 標簽:

          windows下配置nginx和php環境(wnmp)

          2016年11月27日 沒有評論

          1.準備
          創建安裝目錄D:/web,我們所有的文件都會放在這個目錄下

          下載nginx最新版

          下載php:php-5.4.16-Win32-VC9-x86.zip

          2.下載完成會后獲得如下文件,解壓縮并重命名文件夾去掉版本號
          php-5.4.16-Win32-VC9-x86.zip
          nginx-1.10.2.zip

          3.配置nginx
          nginx不需要額外的配置,直接運行就可以,打開命令行cmd切換到d:/web/nginx
          輸入 start nginx 后回車即可啟動
          瀏覽器中訪問http://localhost/可以看到歡迎頁面表示安裝成功
          具體可以參考windows下安裝nginx

          3.配置php
          在php的目錄下可以找到php.ini-development文件,復制一份并將文件名修改為php.ini。然后修改配置文件內容
          ; extension_dir = "ext" ,刪除前面的分號并修改為:extension_dir = "D:/web/php/ext"
          ;cgi.force_redirect = 1,刪除前面的分號:cgi.force_redirect = 1
          ;cgi.fix_pathinfo=1,刪除前面的分號:cgi.fix_pathinfo=1
          ;cgi.rfc2616_headers = 0,刪除前面的分號:cgi.rfc2616_headers = 1

          命令行下輸入如下命令啟動php,不報錯表示啟動成功。

          4.檢查nginx、php是否安裝成功
          在D:/web/nginx/html下新建一個phpinfo.php,加入如下內容后保存

          修改nginx.conf 增加server,也就是虛擬服務器

          重啟nginx
          打開瀏覽器訪問http://localhost/phpinfo.php
          能看到php信息表示安裝成功。

          4.安裝mysql
          這個步驟根其它環境無特殊不同,如果安裝過可以直接使用,未安裝的可以根據mysql安裝向導下一步即可。

          最終安裝之后的目錄結構

          附:nginx和php的快速啟動和關閉腳本
          啟動腳本

          關閉腳本

          遇到的問題:
          如果遇到提示php不是有效的win32程序,是因為安裝的微軟運行時庫不對2003需要使用vc9版本的php

          分類: nginx 標簽: , ,

          nginx + fastcgi + c/c++

          2016年7月18日 1 條評論

          使用php寫后端程序的例子很多,用c/c++的比較少。

          本文采用nginx,spawn,fastcgi++來構建一個基于cgi的web程序。
          由于fastcgi++依賴于boost庫,我們先來裝boost庫

          Linux下編譯boost

          1.編譯前的準備工作

          2.下載安裝包并解壓

          編譯安裝

          測試boost庫是否可以使用,boost編譯完成后運行程序報錯,

          最開始以為是bzip2沒裝上,折騰了許久也沒搞定,最后我發現boost的官方文檔寫著gcc4.4.7,而我本地的編譯器是4.4.6,之后我把gcc升級到4.8重新編譯通過。

          redhat6.3升級gcc4.8.0編譯安裝方法:

          1.下載源碼并解壓

          2.下載編譯所需的依賴項

          3.建立編譯輸出目錄
          mkdir gcc-build-4.8.0

          4.進入此目錄,執行以下命令,生成makefile文件

          5.執行以下命令進行編譯,編譯時間比較長

          6.安裝
          sudo make install

          安裝完成后查看版本

          重新執行boost的編譯,編寫一個例子測試是否成功

          編譯運行

          spawn-fcgi安裝

          fastcgi安裝

          啟動fastcgi程序

          如果啟動報錯,可以加參數-n來看具體原因。

          我的報錯如下,因為升級了gcc4.8,沒有升級libstdc++.so.6導致。

          /usr/lib/libstdc++.so.6: version `GLIBCXX_3.4.15' not found錯誤的解決

          沒有3.4.15

          連接到libstdc++.so.6新的庫

          再次啟動fastcgi程序

          程序會在前臺運行
          檢查程序是否正常運行

          配置nginx,增加

          重新加載ngnx的配置

          打開瀏覽器,訪問http://192.168.18.11/utf8-helloworld.fcgi,你會看到。
          English: Hello World
          Russian: Привет мир
          Greek: Γεια σα? κ?σμο
          Chinese: 世界您好
          Japanese: 今日は世界
          Runic English?: ???? ?????

          參考
          http://www.cnblogs.com/skynet/p/4173450.html
          http://www.cnblogs.com/wanghetao/p/3934350.html
          http://www.nongnu.org/fastcgipp/doc/2.1/index.html

          分類: c++, nginx 標簽:
          印度快乐8官网
          <em id="1rarx"><ins id="1rarx"></ins></em><sup id="1rarx"></sup>

          <progress id="1rarx"><tr id="1rarx"></tr></progress>
          <sup id="1rarx"><menu id="1rarx"></menu></sup>
          <menuitem id="1rarx"></menuitem><optgroup id="1rarx"><small id="1rarx"><sub id="1rarx"></sub></small></optgroup>

            <sup id="1rarx"><menu id="1rarx"></menu></sup>
            <div id="1rarx"></div><div id="1rarx"><tr id="1rarx"><object id="1rarx"></object></tr></div>
              <em id="1rarx"></em>

                  <em id="1rarx"><ins id="1rarx"></ins></em><sup id="1rarx"></sup>

                  <progress id="1rarx"><tr id="1rarx"></tr></progress>
                  <sup id="1rarx"><menu id="1rarx"></menu></sup>
                  <menuitem id="1rarx"></menuitem><optgroup id="1rarx"><small id="1rarx"><sub id="1rarx"></sub></small></optgroup>

                    <sup id="1rarx"><menu id="1rarx"></menu></sup>
                    <div id="1rarx"></div><div id="1rarx"><tr id="1rarx"><object id="1rarx"></object></tr></div>
                      <em id="1rarx"></em>