CentOS7下LNMP環境搭建
換源
把最基本的源換為國內的(163,aliyun)
預先執行
yum install wget vim tree pstree telnet gcc cmake screen htop top lrzsz git -y
去yum的配置檔案
cd /etc/yum.repos.d
根據不同的系統下不同的源
centos6的
wget http://mirrors.163.com/.help/CentOS6-Base-163.repo
或centos7的
wget http://mirrors.163.com/.help/CentOS7-Base-163.repo
首先備份yum原有源 /etc/yum.repos.d/CentOS-Base.repo
mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
新增epel源
epel的安裝
yum install epel-release -y
新增remi源
去yum的配置檔案
cd /etc/yum.repos.d
CentOS6:
wget http://rpms.remirepo.net/enterprise/remi-release-6.rpm
rpm -Uvh remi-release-6.rpm
centos7:
wget http://rpms.remirepo.net/enterprise/remi-release-7.rpm
rpm -Uvh remi-release-7.rpm
安裝完成然後修改remi配置 :
vim /etc/yum.repos.d/remi.repo
將其中 [remi] 下的enabled=0改為1(11行左右),儲存退出,配置完成
生成源的快取
清理下
yum clean all
生成快取
yum makecache
更新下系統
yum update -y
nginx
去源的配置檔案
cd /etc/yum.repos.d
添加個檔案
vim nginx.repo
新增這些
[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/mainline/centos/7 /$basearch/
gpgcheck=0
enabled=1
安裝nginx
yum install nginx -y
nginx的一些命令
# 檢視nginx的配置檔案
nginx -t
# 檢視nginx的版本
nginx -V
# 啟動nginx(start/status/restart)(如果是centos6的話,把systemctl換為service)
systemctl start nginx
php
去源的配置檔案
cd /etc/yum.repos.d
安裝那個版本的php,就把那個版本的php的enable開啟
安裝php(cli和fpm都要安裝)
yum install php php-fpm php-mysqlnd php-pear php-devel php-swoole php-mbstring php-mcrypt php-mongodb php-mysqli php-gd php-dom php-apc php-memcache php-redis php-zip
php的常見命令
# 檢視安裝的php模組(cli和fpm)
php -m
php-fpm -m
# 檢視php的配置檔案
php --ini
# 檢視php的版本
php -v
php-fpm -v
# 啟動php,也就是啟動fpm,(cli是不需要啟動的)(start/status/restart)(如果是centos6的話,把systemctl換為service)
systemctl start php-fpm
mysql
去源的配置檔案
cd /etc/yum.repos.d
首先,下載rpm包
wget http://dev.mysql.com/get/mysql57-community-release-el7-9.noarch.rpm
安裝rpm包
rpm -ivh mysql57-community-release-el7-9.noarch.rpm
開啟 mysql-community.repo 看關於mysql的內空,確定mysql57的enable是開啟的
vim /etc/yum.repos.d/mysql-community.repo
安裝mysql
yum install -y mysql-community-server
修改mysql密碼
其實想要重置 5.7 的密碼很簡單:
修改 /etc/my.cnf
,在 [mysqld]小節下新增一行:
skip-grant-tables=1
這一行配置讓 mysqld 啟動時不對密碼進行驗證
重啟 mysqld 服務,沒啟動的話啟動:
systemctl start mysqld
# 或
systemctl restart mysqld
切換到mysql資料庫,更新 user 表:
# 執行這個命令直接回車
mysql -uroot -p
use mysql;
# password('root')單引號的換為自己的
update user set authentication_string = password('root'), password_expired = 'N', password_last_changed = now() where user = 'root';
修改 /etc/my.cnf,在 [mysqld]小節刪除這一行:
skip-grant-tables=1
重啟 mysqld 服務:
systemctl restart mysqld
composer
安裝
命令列安裝
# 下載安裝指令碼 - composer-setup.php - 到當前目錄
php -r "copy('https://install.phpcomposer.com/installer', 'composer-setup.php');"
# 執行安裝過程
php composer-setup.php
# 刪除安裝指令碼
php -r "unlink('composer-setup.php');"
執行第一條命令下載下來的 composer-setup.php 指令碼將簡單地檢測 php.ini 中的引數設定,如果某些引數未正確設定則會給出警告;
然後下載最新版本的 composer.phar 檔案到當前目錄。
配置環境變數
將 Composer 安裝到系統環境變數 PATH 所包含的路徑下面,然後就能夠在命令列視窗中直接執行 composer 命令了
sudo mv composer.phar /usr/local/bin/composer
配置映象
修改 composer 的全域性配置檔案
composer config -g repo.packagist composer https://packagist.phpcomposer.com
執行之後會發現 Composer 全域性的 ~/.config/composer/config.json
檔案下增加了如下內容:
{
"config": {},
"repositories": {
"packagist": {
"type": "composer",
"url": "https://packagist.phpcomposer.com"
}
}
}
如果有上面的這個就表示源新增成功
redis
安裝redis
yum install redis -y
修改配置檔案
vim /etc/redis.conf
在vim的尾行模式下/
後面跟你要查詢的,就是vim的查詢
先 `:set nu` 開啟行數顯示
查詢 `protected-mode` 把他的值改為no,然後按ESC變為尾行模式
查詢 `requirepass` 會有多個,有一個是單獨一行的,找到那個,去掉註釋,並在後面設定密碼,我這邊設定的是default
查詢 `bind 127.0.0.1` 可能會有多個,如有沒註釋的,就把他們註釋了
啟動redis
# 啟動
systemctl start redis
# 檢視狀態
systemctl status redis
redis的服務命令是redis-server
還有客戶端的redis-cli
防火牆
檢視selinux有沒有關閉
vim /etc/selinux/config
看這個SELINUX的值等不等於disabled
設定防火牆
centos7
先關閉firewall
#停止firewall
systemctl stop firewalld.service
#禁止firewall開機啟動
systemctl disable firewalld.service
#檢視預設防火牆狀態(關閉後顯示notrunning,開啟後顯示running)
firewall-cmd --state
如果是虛擬機器下面一步就不需要配置了,如果是線上需要配置下
配置iptables
安裝iptables防火牆
yum install iptables-services -y
如果怕shell暴力破解,就安裝這個
yum install fail2ban -y
然後修改防火牆的配置
vim /etc/sysconfig/iptables
修改為如下
# sample configuration for iptables service
# you can edit this manually or use system-config-firewall
# please do not ask us to add additional ports/services to this default configuration
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 443 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 3306 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 6379 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
COMMIT
主要是開啟ssh的22,http的80,https的443,mysql的3306,redis的6379
如有需要再來新增,新增完了,需要重啟iptables
# 啟動iptables
systemctl start iptables
# 檢視狀態
systemctl status iptables
修改linux檔案最大開啟數(非必要設定)
程序開啟檔案數調優
echo "* soft nproc 65535" >> /etc/security/limits.conf
echo "* hard nproc 65535" >> /etc/security/limits.conf
上面是軟限制
下面是硬限制
軟限制突破會警告,硬限制是不能突破的
使用者的最大程序數
cd /etc/security/limits.d/
看下面的那個檔案
修改為
root hard nproc unlimited
root soft nproc unlimited
修改完需要重啟伺服器
reboot
新增使用者
新增使用者,預設會新增與使用者同名的組
使用者default
useradd default
passwd 使用者名稱
修改php的配置
vim /etc/php-fpm.d/www.conf
分別查詢這2個user,group
把這邊使用者和組別設定為你新增的使用者和組別
user = default
group = default
修改ini檔案
vim /etc/php.ini
查詢檔案中display_error
如果是off就改為display_error=On
如果不改的話,他是程式碼寫錯了只報500伺服器錯誤,不顯示php程式碼錯誤,把錯誤報告開啟下來
然後重啟php
systemctl restart php-fpm
修改nginx的配置檔案
cd /etc/nginx
新增一些檔案
新增url重寫檔案
vim wordpress.conf
新增內容如下
location / {
try_files $uri $uri/ /index.php?$args;
}
# Add trailing slash to */wp-admin requests.
rewrite /wp-admin$ $scheme://$host$uri/ permanent;
新增nginx轉發給php檔案
vim enable-php-pathinfo.conf
新增內容如下
location ~ [^/]\.php(/|$)
{
# 這邊走的是埠轉發,還有種轉發給sock但是我的php-fp沒有listen這個,可以自己配置,然後這邊寫unix:/tmp/php-cgi.sock;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
include fastcgi.conf;
include pathinfo.conf;
}
新增pathinfo檔案
vim pathinfo
新增內容如下
fastcgi_split_path_info ^(.+?\.php)(/.*)$;
set $path_info $fastcgi_path_info;
fastcgi_param PATH_INFO $path_info;
try_files $fastcgi_script_name =404;
修改nginx.conf
# 定義Nginx執行的使用者和使用者組,來指定Nginx Worker程序執行使用者以及使用者組,預設由nobody賬號執行
user default default;
#nginx程序數
worker_processes auto;
#全域性錯誤日誌定義型別,[ debug | info | notice | warn | error | crit ],其中debug輸出日誌最為最詳細,而crit輸出日誌最少
error_log /usr/local/log/nginx/error.log debug;
#一個nginx程序開啟的最多檔案描述符數目,理論值應該是最多開啟檔案數(系統的值ulimit -n)與nginx程序數相除,但是nginx分配請求並不均勻,所以建議與ulimit -n的值保持一致,可以使用命令“ulimit -n 65535”來設定其他值。
worker_rlimit_nofile 65535;
# var/run這個資料夾包含描述系統啟動以來系統資訊的資料。
# 此資料夾下的檔案必須在啟動過程初期清除(刪除或歸零)。
# 程式可以在/var/run下有自己的子資料夾。原先放在/etc下的程序標識(PID)檔案必須放
# 在/var/run裡面。PID檔案的命名慣例是<program-name>.pid。所以,nginx的PID檔名為/var/run/nginx.pid。
# nginx.pid存放的是nginx的master程序的程序號。那麼現在的openresty,就是openresty.pid
# 程序檔案,用來指定程序id的儲存檔案位置
pid /var/run/nginx.pid;
events {
#網路工作模式有select、epoll、kqueue等。epoll和kqueue為高效模式、select為穩定模 式,只不過Linux使用epoll(首選),FreeBSD使用kqueue,傳統apache使用select。
#epoll是多路複用IO(I/O Multiplexing)中的一種方式,但是僅用於linux2.6以上核心,可以大大提高nginx的效能。
# mac用kqueue, linux用epoll, windows用iocp
use epoll;
#單個工作程序最大允許連線數
worker_connections 65535;
#告訴nginx收到一個新連線通知後接受盡可能多的連線。
multi_accept on;
}
http {
#來用設定檔案的mime型別,型別在配置檔案目錄下的mime.type檔案定義,來告訴nginx來識別檔案型別
include mime.types;
#預設檔案型別
default_type application/octet-stream;
#設定mime型別,檔案傳送型別由mime.type檔案定義
server_names_hash_bucket_size 128; #儲存伺服器名字的hash表大小
client_header_buffer_size 32k; #客戶端請求頭部緩衝區大小
large_client_header_buffers 4 32k; #最大客戶端頭緩衝大小
client_max_body_size 50m; #客戶端最大上傳檔案大小
#開啟目錄列表訪問,合適下載伺服器,預設關閉
autoindex off;
#定義日誌格式
log_format access '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" $http_x_forwarded_for';
#off隱藏Nginx版本號 (可用curl –I ip地址檢視)
server_tokens off;
# 字符集
charset UTF-8;
#sendfile 指令指定 nginx 是否呼叫 sendfile 函式(zero copy 方式)來輸出文 件,對於普通應用,必須設為 on。如果用來進行下載等應用磁碟IO重負載應用,可 設定為off,以平衡磁碟與網路I/O處理速度,降低系統的uptime.
sendfile on;
#這個是預設的,結果就是資料包不會馬上傳送出去,等到資料包最大時,一次性的 傳輸出去,這樣有助於解決網路堵塞。(只在sendfile on時有效)
tcp_nopush on;
#防止網路阻塞
tcp_nodelay on;
#fastcgi設定php-fpm
#FastCGI相關引數是為了改善網站的效能:減少資源佔用,提高訪問速度
fastcgi_connect_timeout 300;
fastcgi_send_timeout 300;
fastcgi_read_timeout 300;
fastcgi_buffer_size 64k;
fastcgi_buffers 4 64k;
fastcgi_busy_buffers_size 128k;
fastcgi_temp_file_write_size 256k;
#開啟gzip網路壓縮
gzip on;
#最小壓縮檔案大小
gzip_min_length 1k;
#壓縮緩衝區
gzip_buffers 4 16k;
#壓縮版本(預設1.1,前端如果是squid2.5請使用1.0)
gzip_http_version 1.1;
#壓縮等級
gzip_comp_level 2;
#壓縮型別,預設就已經包含text/html,所以下面就不用再寫了,寫上去也不會有問題,但是會有一個warn
gzip_types text/plain application/javascript application/x-javascript text/javascript text/css application/xml application/xml+rss;
gzip_vary on;
gzip_proxied expired no-cache no-store private auth;
gzip_disable "MSIE [1-6]\.";
#limit_zone crawler $binary_remote_addr 10m; #開啟限制IP連線數的時候需要使用
# 日誌
access_log /usr/local/log/nginx/access.log access;
# 載入以前nginx的
include /etc/nginx/conf.d/*;
}
建立日誌檔案
mkdir -p /usr/local/log/nginx
新增站點
cd /etc/nginx/conf.d
建立預設檔案,以後新增站點就是把這個複製改下就行
server
{
# 監聽埠
listen 80;
listen [::]:80;
# 域名可以有多個,用空格隔開
server_name localhost;
index index.php index.html index.htm default.php default.htm;
# 專案資料夾 /home/default
root /home/default/default/public/;
#error_page 404 /404.html;
# Deny access to PHP files in specific directory
#location ~ /(wp-content|uploads|wp-includes|images)/.*\.php$ { deny all; }
# nginx轉發給php
include enable-php-pathinfo.conf;
# url重寫
include wordpress.conf;
# 圖片快取時間設定
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
{
# 過期時間1小時
expires 1h;
}
# js和css快取時間設定
location ~ .*\.(js|css)?$
{
# 過期時間1小時
expires 1h;
}
location ~ /.well-known {
allow all;
}
location ~ /\.
{
deny all;
}
#設定檢視Nginx狀態的地址
# location /NginxStatus {
# stub_status on;
# access_log on;
# auth_basic "NginxStatus";
# auth_basic_user_file confpasswd;
#htpasswd檔案的內容可以用apache提供的htpasswd工具來產生。
# }
# /usr/local/var/log/nginx/
access_log /usr/local/log/nginx/default.log access;
}
注意看註釋,上面root和server_name,是有差異的,改為自己的
重啟nginx
# 檢視nginx的配置是否正確
nginx -t
# 重啟nginx
systemctl restart nginx
配置/etc/hosts
如果是虛擬機器,就需要配置這個,配置了這個他就他不請求外網了
如果是伺服器就不要配置,自己買域名吧,做A解析吧
127.0.0.1 域名
配置檔案彙總
# nginx的配置檔案目錄和站點配置檔案目錄
cd /etc/nginx/
cd /etc/nginx/conf.d/
# php的配置檔案(可以用 php --ini 檢視)
cd /etc/php.d/
# 檢視php-fpm配置檔案和子配置的目錄
vim /etc/php-fpm.conf
cd /etc/php-fpm.d/
# mysql配置檔案
cat /etc/my.cnf
# redis配置檔案和哨兵配置檔案
cat /etc/redis.conf
cat /etc/redis-sentinel.conf
# nginx的日誌資料夾
cd /usr/local/log/nginx