Nginx | 默認訪問日誌 | /usr/local/nginx/logs/access.log |
默認錯誤日誌 | /usr/local/nginx/logs/error.log | |
PHP | 默認錯誤日誌 | /var/log/php-fpm/www-error.log |
tomcat | 日誌目錄 | /tomcat的安裝位置/tomcat/logs |
安裝nginx,lnmp
在資源中有一個nginx的tar包,裏面有nginx、lnmp的安裝配置,還有一個blog詳細分析了nginx、lnmp的安裝腳本的編寫,基本思路就是一個源碼包的配置安裝
解壓,配置,編譯,安裝。
在配置中有些基本的配置數據:
--prefix=/usr/local/nginx 設置安裝位置
--user=nginx 設置用戶
--group=nginx 設置所屬組
--with-http_ssl_module 設置需要的拓展模塊(在tar包中有個mode的文件裏面有所有的拓展模塊)
升級nginx(如果要重新修改安裝模塊)
和安裝差不多,不過,編譯後,不能安裝,而是把objs下的程序拷貝到nginx/sbin下即可,資源包中的nginx_install會自動監測是否安裝了,沒有安裝的話會自動進行升級操作。
lnmp的配置
lnmp是四個服務的合稱,分別是linux、nginx、mariadb、php
nginx
其配置文件:/usr/local/nginx/conf/nginx.conf
nginx的虛擬主機
在主配置文件的http中每個server都是一個虛擬主機
http{
server{ 代表一個虛擬主機的配置
listen 80; 代表該虛擬主機的接口
server_name www.localhost.com; 代表域名
root html; 地址庫(可以是相對位置,可以是絕對路徑,相對位置是再nginx安裝位置找)
}
}
nignx可以作安全的web網站,在一個虛擬網站server中
listen 443 ssl;
server_name 域名;
ssl_certificate cert.pem; #這裏是證書文件
ssl_certificate_key cert.key; #這裏是私鑰文件
nginx的動靜分離
原理很簡單,就算把php結尾的文件單獨處理,不過要安裝php相關的包,再php中在詳細解釋
location ~ \.php$ { # 可以理解成if或者case,他就是當匹配後面的正則表達式的時候執行下面語句
root html; # documentroot,網站根目錄的位置
fastcgi_pass 127.0.0.1:9000; # 這個的意思就是php文件給誰解釋,一般php解釋器是本機的9000端口
fastcgi_index index.php; # 默認沒有寫文件的時候,打開的網頁
fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
include fastcgi_params;
}
nginx的地址重寫技術
rewrite 舊地址 新地址 [選項]
last 不再讀其他rewrite,作用是讓地址重寫,匹配即停止
break 不再讀其他語句,結束請求,匹配rewrite後,下面所有的語句全部不執行
redirect 臨時重定向,實現跳轉地址欄,就是會讓客戶端的地址欄中的地址也會變化,
注意:不能修改/地址的時候用這個選項會導致一個無線循環調轉,因爲新地址中也一定有/導致,根一直在循環調轉
permament 永久重定向
域名重寫: rewrite ^/(.*) 新域名地址$1
nginx的調度
基本格式:
upstream 集羣名 # 定義集羣,然後調度
{
server ip 配置屬性; # 集羣配置,讓什麼ip加入集羣中
}
server{
listen 監聽的端口;
proxy_pass 集羣名; # 調用上面定義的集羣
}
一個是網站的調度
直接在http內用upstream創建集羣,在server裏面調度,不過proxy_pass http://集羣名,集羣名前要加http
另一個是TCP/IP四層的調度
需要安裝相關的模塊--with-stream,然後在http外面寫一個stream裏面寫基本格式即可
不過如果是數據庫的調度代理,需要注意mariadb不允許root遠程登陸,所以要創建用於遠程登陸的用戶並賦權
nginx的優化
1. 設置登陸的賬戶和密碼
先要創建密碼文件裝包:httpd-tools
用相關命令:如果是第一次新建就加-c,如果是網文件中寫就不要-c,回車後輸入密碼
htpasswd [-c] 密碼文件位置 用戶
再修改主配置文件:
auth_basic "Input your name and password:"; # 密碼輸入前的提示信息
auth_basic_user_file "/usr/local/nginx/pass"; # 密碼文件的位置
2. 爲了提高安全性,網站不顯示nginx的版本號,修改nginx主配置文件http
server_tokens off;
再修改nginx/conf/fastcgi.conf中的顯示內容,把SERVER_SOFTWARE這行後面的內容修改了
fastcgi_param SERVER_SOFTWARE nginx/$nginx_version;
修改成
fastcgi_param SERVER_SOFTWARE nginx;
3. 修改nginx的CPU和併發連接數,(升級後還需要修改內核的限制纔有用)修改nginx配置文件:
worker_processes 2; //與CPU核心數量一致
events{
worker_connections 65535; //每個worker最大併發連接數
use epoll; //使用較優算法
}
4. 調整內核,其中硬鏈接限制軟連接,軟連接限制連接個數,這是修改系統配置
ulimit -Hn 100000 # 臨時調整硬鏈接
ulimit -Sn 100000 # 臨時調整軟鏈接
永久修改要改配置文件/etc/security/limits.conf
下面那幾行,分別代表:
對什麼生效 ,格式(soft軟,hard硬 ),需要限制的項目,限制的值
#<domain> <type> <item> <value>
5. 修改nginx的內存佔比,修改nginx的主配置文件的htpp即可
include mime.types;
default_type application/octet-stream;
client_header_buffer_size 1k; # 修改默認開啓的緩存大小
large_client_header_buffers 4 4k; # 默認緩存不夠時,開啓
6. 配置緩存的保留時間長短,不常修改的文件讓客戶端緩存起來,這也是修改nginx配置的server即可
server {
location ~* \.(jpg|jpeg|gif|png|css|js|ico|xml)$ {
expires 30d; //定義客戶端緩存時間爲30天
}
}
7. 編寫錯誤信息的提示頁面,提高用戶滿意度,修改nginx配置文件的http即可
error_page 錯誤序號1 錯誤序號2 …… /文件路徑和目錄
錯誤編號 | 含義 |
200 | 正常 |
301 | 永久重定向 |
302 | 臨時重定向 |
304 | 重定向到本機,指的緩存信息 |
401 | 用戶名和密碼錯誤 |
403 | 禁止訪問,也就是IP被拒絕訪問了 |
404 | 文件不存在 |
414 | 請求的URI地址欄太長 |
500 | 服務器內部錯誤 |
502 | 集羣中,調度器無法和後臺服務器鏈接,也就是集羣有問題 |
8. 可以實時查看服務器的狀態,修改nginx配置的server即可
location /status {
allow 允許查看的IP地址;
deny all; # 除了允許的IP,全部拒絕
stub_status on;
}
其中客戶端可以訪問 域名/status 實現遠程查看服務器情況
Active connections | 當前活動的連接數量。 |
Accepts | 已經接受客戶端的連接總數量。 |
Handled | 已經處理客戶端的連接總數量(一般與accepts一致,除非服務器限制了連接數量)。 |
Requests | 客戶端發送的請求數量。 |
Reading | 當前服務器正在讀取客戶端請求頭的數量。 |
Writing | 當前服務器正在寫響應信息的數量。 |
Waiting | 當前多少客戶端在等待服務器的響應。 |
9. 頁面壓縮,修改nginx配置的server即可
gzip on; //開啓壓縮
gzip_min_length 最小文件大小、字節數; //小文件不壓縮
gzip_comp_level 壓縮比例、是一個整數; //壓縮比率
gzip_types 壓縮文件類型1 壓縮文件類型2; //對特定文件壓縮,類型參考/etc/mime.types
10. 服務器運用內存進行緩存,修改nginx配置的server即可
open_file_cache max=最大多少緩存內容 inactive=多少時間沒有請求就關閉這緩存數據;
open_file_cache_valid 多少時間強制刷新緩存;
open_file_cache_min_uses 被請求多少次纔會被緩存;
open_file_cache_errors off; # 關閉緩存報錯,如果緩存出錯,直接取硬盤找,不需要其報錯
PHP
其是一個有很多模塊組成的程序,連接每個類型數據庫都要不同的模塊,
如果要連接mariadb需要安裝php php-mysql php-fpm-5.4.16-42.el7.x86_64.rpm(在資源的nginx的tar包中有軟件包)
其配置文件: /etc/php-fpm.d/www.conf
[www]
listen = 127.0.0.1:9000 //PHP的IP和端口號
pm.max_children = 32 //最大進程數量
pm.start_servers = 15 //最小進程數量
pm.min_spare_servers = 5 //最少需要幾個空閒着的進程
pm.max_spare_servers = 32 //最多允許幾個進程處於空閒狀態
再看其連接mariadb的基本文件類型
<?php
$mysqli = new mysqli('localhost','root','密碼','mysql'); # 連接數據庫
if (mysqli_connect_errno()){ # 判斷數據庫是否連接
die('Unable to connect!'). mysqli_connect_error();
}
$sql = "select * from user";
$result = $mysqli->query($sql); # 進行數據庫命令操作
?>
mariadb
裝包:mariadb mariadb-server mariadb-devel
服務:mariadb
準備數據庫,賦予一個用戶權限後,讓服務器可以遠程訪問
然後,基本的數據庫數據的調度都是通過php完成的
nginx最終主配置文件:
#user nobody;
worker_processes 4; # 儘量與CPU核心數一致
#error_log logs/error.log; # 記錄錯誤信息的日誌文件
#error_log logs/error.log notice;
#error_log logs/error.log info;
#pid logs/nginx.pid; # 記錄nginx的當前進程的文件
events {
worker_connections 1024; # 每個worker最大併發連接數
use epoll; # 使用較優算法
}
stream { # 對於TCP/IP的調度,需要拓展模塊--with-stream
upstream 集羣名 {
server IP:段口號; # 後端SSH服務器的IP和端口
}
server {
listen 監聽的段口號; # Nginx監聽的端口
proxy_pass 集羣名;
}
}
http {
include mime.types;
default_type application/octet-stream;
open_file_cache max=最大多少緩存內容 inactive=多少時間沒有請求就關閉這緩存數據;
open_file_cache_valid 多少時間強制刷新緩存;
open_file_cache_min_uses 被請求多少次纔會被緩存;
open_file_cache_errors off; # 關閉緩存報錯,如果緩存出錯,直接取硬盤找,不需要其報錯
client_header_buffer_size 1k; # 修改默認開啓的緩存大小
large_client_header_buffers 4 4k; # 默認緩存不夠時,開啓的最大內存個數和每個內存部分存的大小
sendfile on;
server_tokens off; # 爲了安全,不顯示nginx版本號
keepalive_timeout 65;
upstream webs {
server 192.168.2.100:80;
server 192.168.2.200:80;
}
gzip on; # 開啓頁面壓縮
gzip_min_length 最小文件大小、字節數; # 小文件不壓縮
gzip_comp_level 壓縮比例、是一個整數; # 壓縮比率
gzip_types 壓縮文件類型1 壓縮文件類型2; # 對特定文件壓縮,類型參考/etc/mime.types(左列是壓縮類型,右列是指相關文件後綴名)
server { # 代表一個虛擬主機的配置
listen 80; # 監聽端口
server_name 域名1; # 設置的域名信息
auth_basic "Input your name and password:"; # 密碼輸入前的提示信息
auth_basic_user_file "/usr/local/nginx/pass"; # 密碼文件的位置
#charset koi8-r;
upstream 集羣名 # 定義集羣,然後在server虛擬主機中調度
{
server ip1 配置屬性; # 集羣配置,讓什麼ip加入集羣中,配置屬性有weight權重,max_fails失敗次數,fail_timeout超時時間,down關機,具體查看day3
server ip2 weight=1 max_fails=1 fail_timeout=120;
ip_hash; # 根據哈希取餘算法進行分配,一條配置就完成了哈希取餘算法調配的所有操作,具體的IP哈希取餘法查看day3
}
#access_log logs/host.access.log main;
if ($http_user_agent ~* 瀏覽器名稱) { # 識別客戶端瀏覽器
rewrite ^(.*)$ /自定義的網頁目錄/$1;
} # 如果是要求的瀏覽器,則進行地址重寫
rewrite /被重寫地址 /重寫地址 選項; # 把所有想要重寫的地址進行重寫操作,其選項有last,break,redirect臨時,permament永久,具體內容請查看day2
location / {
proxy_pass http://集羣名; # 調度給其他web服務器
root html; # 根目錄文件所在位置
}
location /status {
allow 允許查看的IP地址;
deny all; # 除了允許的IP,全部拒絕
stub_status on;
}
error_page 404 /404.html; # 編寫404錯誤的頁面內容
error_page 500 502 503 504 /50x.html; # 編寫50*錯誤頁面的內容
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
location ~ \.php$ { # 可以理解成if或者case,他就是當匹配後面的正則表達式的時候執行下面語句
root html; # documentroot,網站根目錄的位置
fastcgi_pass 127.0.0.1:9000; # 這個的意思就是php文件給誰解釋,一般php解釋器是本機的9000端口
fastcgi_index index.php; # 默認沒有寫文件的時候,打開的網頁
include fastcgi.sconf;
}
}
}
# another virtual host using mix of IP-, name-, and port-based configuration
server { # 另外一個web服務器
listen 80;
server_name 域名2;
location / {
root html;
index index.php index.html index.htm; # 沒有寫文件的時候默認查看的文件,從前往後依次找
}
}
# HTTPS server
server { # 這是安全的web網站
listen 443 ssl;
server_name 域名;
ssl_certificate cert.pem; # 這是證書文件
ssl_certificate_key cert.key; # 這是私鑰文件
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 5m;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
location / {
root html;
index index.html index.htm;
}
}
server { # 把不常改變的文件內容讓客戶端進行緩存
location ~* \.(jpg|jpeg|gif|png|css|js|ico|xml)$ {
expires 30d; //定義客戶端緩存時間爲30天
}
}
}